Пример 1. Работа с простыми файлами, преобразование, запись данных в базу. Автоматизация запуска графа.
Описание задачи
Разработать граф для загрузки данных из CSV файла в таблицу. Добавить поля со временем создания и обновления записей. Изменить в поле price символ точки, на запятую.
Настроить расписание и обработчик событий, вызвать созданный граф из другого графа.
Создание графа для преобразования данных и записи в базу
- Чтобы создать новый граф, найдите в структуре своего проекта на панели Project structure папку
grapf, в которую поместите граф. Кликните правой кнопкой на папку graph, выберите в меню пунктNew grf file. Задайте имя графа, напримерload_ecommerce_behavior.grfи нажмите Создать. - Привяжите к графу внешний файл параметров:
панель Outline -> Parameters -> Link parameters ->вставьте путь к файлу параметров./workspace.prmв полеfileURL. - Привяжите также файл с описанием соединения с базой:
панель Outline -> Connections -> Link connection ->вставьте путь к файлу соединения./conn/demo2.conв полеdbConfig. - Перетащите на рабочую область с панели компонентов узлы CsvReader, Map, PostgresSqlDataWriter.
- Соедините порты узлов рёбрами. Вытягивайте ребро из выходного порта (с правой стороны) узла и отпускайте, когда довели курсор до входного порта (с левой стороны) другого узла.
- Создайте 2 меты через редактор метаданных.
- на панели Outline откройте контекстное меню раздела
Metadata ->выберите пунктNew metadata. Задайте имя метаданных -ecommerce_behavior. Создайте 8 полей типа string:event_time,event_type,product_id,category_id,category_code,brand,price,user_id,user_session/ Чтобы добавить поля в мету используйте кнопку+. Чтобы удалить ненужное поле - кнопку- - на панели Outline откройте контекстное меню метадаты
ecommerce_behavior ->выберите пунктCopy metadata. Скопируйте метуecommerce_behaviorи вставьте ее через контекстное меню разделаMetadata -> Paste metadata. Откройте редактор и смените название меты наecommerce_behavior_out. Добавьте еще два поля типа date:created_at,updated_at
- на панели Outline откройте контекстное меню раздела
- Перетащите мету
ecommerce_behaviorс панели Outline на ребро между узлами CsvReader и Map, а метуecommerce_behavior_outна ребро между Map и PostgresSqlDataWriter. - Заполните значения атрибутов узлов. Чтобы открыть редактор узла, дважды кликните по его поверхности.
- в CsvReader нужно вставить имя файла-источника данных в поле
fileURL=${DATAIN_DIR}/2019-Nov.csv - в Map заполнить поле
transformкодом трансформации на внутреннем языке Onebridge. Код приведён ниже в таблице "Атрибуты MAP". - в PostgresSqlDataWriter выберите имя нужного
dbConnectionиз списка, вставьте имя таблицы для записи в полеtable, и укажите параметры для записи вparameters
- в CsvReader нужно вставить имя файла-источника данных в поле
Полный список значений атрибутов для каждого узла приведён в следующем разделе Атрибуты используемых узлов.
На рисунке ниже представлен созданный граф для загрузки данных из CSV файла в базу:

Атрибуты используемых узлов
Атрибуты CSV_READER:
| Атрибут | Значение | Описание |
|---|---|---|
| phase | 0 | Фаза узла |
| node name | CsvReader | Имя узла, отображаемое в рабочей области |
| enabled | true | Работоспособность узла |
| fileURL | ${DATAIN_DIR}/2019-Nov.csv | Путь к источнику данных |
| charset | UTF_8 | Кодировка файла-источника |
| dataPolicy | strict | Политика обработки некорректных данных при чтении |
| trim | default | Флаг удаления начальных и конечных пробелов в момент прохождения через данный узел |
| header | true | Флаг удаления заголовка файла |
| quotedStrings | false | Флаг восприятия спец. символов |
| quoteChar | both | Спец. символ для атрибута quotedStrings |
| fieldDelimiter | , | Разделитель полей |
| recordDelimiter | \n | Разделитель записей |
Атрибуты MAP:
| Атрибут | Значение | Описание |
|---|---|---|
| phase | 0 | Фаза узла |
| node name | CsvReader | Имя узла, отображаемое в рабочей области |
| enabled | true | Работоспособность узла |
| transform |
| Код для преобразования данных и присвоения значений выходным метаданным |
Атрибуты POSTGRESQL_DATA_WRITER:
| Атрибут | Значение | Описание |
|---|---|---|
| phase | 0 | Фаза узла |
| node name | CsvReader | Имя узла, отображаемое в рабочей области |
| enabled | true | Работоспособность узла |
| dbConnection | ./conn/demo2.con | Имя соединения с базой |
| table | ecommerce_behavior | Имя таблицы для записи |
| parameters |
| Параметры для утилиты psql и оператора copy, используемых узлом POSTGRESQL_DATA_WRITER |
Вызов графа из другого графа
Чтобы вызвать созданный граф из другого графа, используйте узел ExecuteGraph.
- Создайте новый граф, задайте имя, например
startLoad - На рабочую область нужно поместить единственный компонент - ExecuteGraph
- Откройте редактор атрибутов узла и задайте в поле
jobURLимя графа, который нужно запустить:jobURL = ./graph/load_ecommerce_behavior.grf - Сохраните изменения атрибутов узла, сохраните граф
CTRL+S.
Так будет выглядеть граф для вызова другого графа:

Теперь, если запустить startLoad.grf, он следом запустит внутренний граф load_ecommerce_behavior.grf.
Результат выполнения можно будет увидеть в панели администратора на странице История выполнения.
Общее время выполнения графа выводится в строку "Продолжительность" на вкладку Обзор. Затем можно перейти к просмотру данных по внутреннему графу через дерево графов в правой верхней части экрана.

Скорость выполнения внутреннего графа можно проверить на вкладке Отслеживание. В столбец "Длительность" выводится длительность работы каждого узла в рамках фазы. На приведенном ниже примере видно, что все узлы работали одновременно одинаковое количество времени.
В столбце "ЗАПИСЕЙ" указано общее количество записей, обработанных данным узлом. В столбце "ЗАПИСЕЙ/СЕК СР" - среднее количество записей, обрабатываемых узлом за секунду.
Рассчитаем общую среднюю скорость работы фазы: Общее количество записей поделим на общее время работы всех узлов, получится, что средняя скорость обработки около 207 698 записей в секунду. Для конкретного CSV-файла это примерно 27063 Кб в секунду.
Таким образом система может обработать 100Гб данных (около 800 млн записей) за ~65 минут.

Создание расписания
Чтобы запустить граф в определенное время в автоматическом режиме, можно использовать расписание.
- Для этого в панели администратора на странице Расписания диалог создания расписаний.
- Задайте имя -
Расписание запуска startLoad.grf, периодичность -Один раз, время исполнения, выберите проект и граф. Сохраните расписание.
Граф будет запущен в назначенное время.

Результат выполнения графа отобразится в панели администратора на странице История выполнения. На вкладке Обзор в поле "Тип запуска" будет указано по расписанию, а в "Пользователь" - root.

Создание обработчика событий
Если нужно, чтобы граф запускался по событию - нужно настроить обработчик для события. Триггерным событием для обработчика может быть окончание работы графа с определенным статусом либо создание/удаление файла в указанной директории.
- В панели администратора, на странице Обработчики событий, вызовите диалог создания обработчика кнопкой Новый обработчик.
- Задайте название обработчика, например,
Поступил файл. Выберите запускающее событие -Файли укажите необходимость проверить добавление файла в директорию/srv/projects/DEMO/data-in/*.csv. Задайте действие, которое надо выполнить -Запуск графаи его параметры: проект -DEMO, граф -/graph/startLoad.grf. Сохраните обработчик.

Когда триггерное событие случится, указанный в поле "Начало" граф будет запущен. Проверить выполнение графа можно на истории выполнения. На вкладке Обзор в поле "Пользователь" будет root, а в поле "Тип запуска" будет указано по какому событию запущен этот граф.
