Как говорят более опытные камрады, 80-90% работы дата сайнтиста - это подготовка данных.
В связи с этим я решил написать небольшой вводный туториал с примерами использования Talend Open Studio for Data Integration (далее TOS). Это открытое IDE на базе Eclipse для интеграции данных, которое позволяет разрабатывать процессы преобразования данных в виде исполняемых JAR-файлов или программ на Perl-е (job-ы, в терминологии TOS), которые уже можно запускать вручную или повесить на cron/планировщик задач Windows. Также TOS можно испольльзовать для моделирования бизнес-процессов. Если верить разработчикам TOS, используя этот инструмент можно разработать сложное приложение для интеграции/оркестрации/etc приблизительно на порядок быстрее, чем если это делать руками. Фактически, TOS является "генератором кода", который позволяет набросать граф преобразования данных при помощи готовых компонентов и соединений, настроить узлы и связи и получить готовое приложение без программирования (в простом случае).
Сразу оговорюсь, что продукт очень большой, и я сам знаю его достаточно поверхностно. Поэтому я сейчас вкратце опишу плюсы и минусы и границы применимости, чтобы вы могли решить, насколько оно вам нужно.
Плюсы:
Минусы:
По моему опыту, TOS может быть полезен либо если задача настолько простая и типовая, что её можно быстро реализовать из набора знакомых вам готовых компонентов без долгово вникания и чтения документации, или если вы разрабатываете что-то действительно очень большое и сложное, и реализовывая это руками можно утонуть в коде, который потом ещё и поддерживать прийдется. Во втором уже может быть разумным инвестировать время в освоение нового инструмента, и написание на Java компонентов, недостающих именно под ваши задачу. Основной проблемой при изучении TOS и работе с нею для меня стало то, что интерфейс во многом неинтуитивный, а читать пол тысячи страниц документации(и это довольно поверхностно), чтобы выполнить запланированную на два дня работу хочется далеко не всегда.
Так что этот инструмент хорошо подойдет тем, кто часто сталкивается с необходимостью выполнять различные задачи по интеграции данных между разными хранилищами (например интернет-магазина и системы складского учета), собиру и агрегации различных данных для последующего анализа, синхронизации баз данных, и т.д. И плохо подойдет тем, кто с такими задачами сталкивается редко и хорошо умеет программировать - таким проще будет написать самим.
Итак, допустим что нам нужно на основе покупок в электронном магазине собирать в определенном формате данные о пользователе, сделанных им покупках, возвратах, прочих данных. На основе этой информации мы, в дальнейшем, можем попытаться сделать, например, кластеризацию пользователей на "хороших" и "плохих" с тем чтобы выяснить какие способы рекламы выгоднее использовать, чтобы привлекать больше "хороших".
Предположим, что большую часть данных мы получаем напрямую из базы данных, а часть - через сервис, который выгружает нам данные в формате csv (на практике вместо компонента для csv-файла может быть компонент для SOAP, CRM или ERP системы, и т.д.).
Итак, качаем TOS с официального сайта Talend. Это здесь. https://www.talend.com/products/data-integration/ Там есть версии и для Windows, и для Mac, и для Linux, обо всех позаботились.
Разархивируем и открываем TOS, создаем новый проект, когда он добавлен в список имеющихся - выбираем и открываем его (нажимаем кнопку Finish).
Далее в новом проекте у меня обычно открывается почему-то пустое окно приветствия, закрываем его.
Перед нами окно TOS, в правой части палитра (если мы только открыли проект она будет пустой) и слева у нас сам проект. Давайте создадим новую работу, для этого сделаем правый клик на пункте Job Designs->Create job
Когда мы выберем новую работу, у нас появится палитра компонентов.
Также было бы удобно сразу создать подключение к базе данных. Для этого мы можем в пункте Metadata выбрать подпункт Db Connections и создать новое подключение, например к MySql-серверу, указав параметры подключения и проверив работоспособность.
Далее, в палитре справа выберем компонент tMysqlInput и перетащим его мышкой на клечатое поле дизайнера. Дважды кликнем на добавленный элемент, и в открывшемся меню компонента мы можем или непосредственно ввести настройки подключения, или выбрать Property Type как Repository и выбрать наше подключение из списка уже созданных.
Также добавляем на поле дизайнера tFileInputDelimited, tMap, tUnite, tFileOutputDelimited, и tFtpPut (последний служит для отправки готового файла по ftp, сначала его можно не добавлять и отладить схемы локально).
Далее, соединяем их перетаскивая мышкой связи от одного к другому, приблизительно вот таким вот образом:
Теперь нам нужно настроить эти компоненты и связи между ними.
Например, для tFileOutputDelimited (условного csv-файла) мы указываем путь к файлу и разделитель. После этого редактируем схему данных для этого файла, приблизительно так:
Теперь пишем SQL-запрос для нашего компонента tMysqlInput (желательно в каком-то нормальном редакторе, в TOS это делать будет очень неудобно) и вставляем его в пункт Query. Например, что-то вот такое:
SELECT entity_id,customer_email, total_paid,customer_firstname,customer_lastname
FROM sales_flat_order
WHERE total_paid > 1500
AND total_paid < 2000
После этого делаем двойной клик на tMap. Этот компонент у нас служит для маппинга данных, как следует из его названия. В данном конкретном случае я делаю предположение, что данные из файла и из базы данных поступили к нам в немного разных форматах, и мы их приводим данные из файла к одному формату, чтобы можно было в дальнейшем обьеденить данные при помощи компонента tUnite. Можно просто взять и перетащить мышкой поля из левой части в правую. В более сложном случае можно поменять имена полей, отформатировать, сделать какие-то более интересные преобразования.
После этого настраиваем остальные связи на схеме аналогичным образом, и параметры выходного файла, не забыв зайти в Advanced settings и снять галочку с пункта "Throw error if the file already exist". В имени файла можно использовать, например, временную метку, чтобы можно было отличить файлы по дате и времени создания.
Если мы все сделали правильно, то граф преобзазования данных готов. Жмем на Run (бело-зеленая стрелка вверху) и получаем приблизительно вот такой результат:
Да, все компоненты можно переназвать как удобно.
Теперь, при желании, можно добавить дополнительно tFtpPut, настроить прямо внутри элемента, или создать контекст, найдя в навигаторе проекта слева одноименный пункт, и вписав в контекст переменные, которые можно использовать в качестве настроек в любом месте проекта.
Также мы можем на сделать правый клик на полученный job, и сделать "Build job", по итогу которого получим в указанном нами месте архив с исходным кодом, метаданными, и собственно jar-файлом.
Как видите, в нашем случае все довольно просто. Функционал TOS гораздо богаче, но я не знаю его достаточно глубоко, поэтому просто придерживаюсь простого правила - я стараюсь делать при помощи SQL и кода до/после максимальное количество работы, а на долю Talend-а оставляю максимально простую схему.
Собственно, все. Критикуйте, дополняйте. поправляйте, спрашивайте - я охотно исправлю и дополню этот мануал, если это будет нужно.