Для записи данных
Шаги для записи данных могут записывать данные в локальные выходные файлы, отправлять их через подключенный дополнительный выходной порт или вставлять в таблицу базы данных.
Шаги для записи — это компоненты графа, которые выполняются последними, поэтому они не имеют выходных портов.
Каждый шаг для записи должен иметь хотя бы один входной порт, через который данные поступают в этот компонент графа.
Шаги для записи могут либо добавлять данные в существующий файл или таблицу базы данных, либо заменять существующее содержимое новым. Для этой цели шаги для записи в файлы имеют атрибут Append
. По умолчанию для этого атрибута установлено значение false
. Это означает, что данные необходимо заменить, а не добавить к имеющимся.
Данные можно записать в один и тот же файл или базу данных несколько раз в течение работы графа с помощью нескольих шагов для записи. Для этого разместите шаги для записи в разных фазах графа.
FLAT_FILE_WRITER - запись в файл
DATABASE_WRITER - запись в базу данных
POSTGRESQL_DATA_WRITER - запись в базу данных Postgres с помощью утилиты
TRASH - прерывание потока данных
Общие свойства шагов для записи
Поддерживаемые форматы URL-адресов для записывающих шагов
Запись в локальные файлы
/path/filename.out
- записывает указанный файл на диск.
Просмотр записанных данных
После создания выходного файла вы можете просмотреть данные в нём в web-приложении на странице проектов на вкладке "Содержимое файла".
Добавление или перезапись
Если целевой файл существует, есть два варианта:
- существующий файл можно заменить;
- записи могут быть добавлены к существующему содержимому.
Добавление или замена настраивается с помощью атрибута Append
.
- Если для параметра
Append
установлено значение true, записи добавляются в файл. - Если для параметра
Append
установлено значение false, файл перезаписывается.Append=false
по умолчанию.
Функция Append
доступна в следующих шагах для записи: FLAT_FILE_WRITER, TRASH.
FLAT_FILE_WRITER
FLAT_FILE_WRITER записывает данные в плоские файлы.
Порты FLAT_FILE_WRITER:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | да | Для входящего потока записей | Любые |
Атрибуты FLAT_FILE_WRITER:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
fileURL | да | Путь к файлу, в который должен быть записан результирующий набор данных | ${WRITE_DIR}/out.txt |
charset | нет | Кодировка входного файла | charset="UTF-8" по умолчанию |
append | нет | Если записи печатаются в существующий непустой файл, они по умолчанию заменяют более старые (при append="false"). Если установлено значение "true", новые записи добавляются в конец существующего содержимого выходного файла(ов). | append="false" по умолчанию |
quotedStrings1 | нет | При quotedStrings="true" все поля заключаются в кавычки. | quotedStrings="true" |
quoteChar1 | нет | Символы, в которые будет заключено значение поля при quotedStrings="true". По умолчанию значение этого атрибута наследуется из метаданных порта ввода 0. | quoteChar="" " |
fieldDelimiter | нет | Разделитель полей | fieldDelimiter="," |
recordDelimiter | нет | Разделитель записей | recordDelimiter=">/~~/<" |
По умолчанию значение этого атрибута наследуется из метаданных порта ?ввода? 0.
Пример. Запись данных в файл.
Например, нужно записать обработанные системой данные в файл, используя разделитель «|».
Данные в системе:
date | last_name | first_name |
---|---|---|
01.02.2011 | Гончаров | Алексей |
29.12.2013 | Нечаев | Илья |
25.11.2016 | Васькин | Николай |
23.10.2019 | Серов | Григорий |
19.09.2022 | Глинка | Евгений |
Данные, записанные шагом FLAT_FILE_WRITER в файл:
01.02.2011|Горилов|Алексей
29.12.2013|Нечаев|Илья
25.11.2016|Васькин|Николай
23.10.2019|Иванов|Григорий
19.09.2022|Горбунов|Евгений
DATABASE_WRITER
DATABASE_WRITER предназначен для выгрузки обработанной информации в базу данных и совершения изменений в базе. Позволяет выполнять несколько SQL-запросов в рамках одной транзакции, для этого выражения в атрибуте sqlQuery разделяются точкой с запятой.
Поддерживает подключение к базам MySQL, Oracle, PostgreSQL.
Подробнее про подключение к базам данных можно прочитать в разделе Соединения с базами данных.
Порты DATABASE_WRITER:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | да | Записи для загрузки в базу данных | Любые |
Output | 0 | нет | Для отклонённых записей | Такие же, как на выходном порте |
Output | 1 | нет | Для возвращённых записей | Такие же, как на выходном порте |
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
dbConnection | да |
Параметры соединения с базой данных. В список параметров для подключения могут входить: database, user, password, host, port. |
|
sqlQuery | нет | Запрос к базе |
|
batchSize | нет | Количество записей для объединения. Актуально если batchMode="true". | batchSize="5" |
batchMode | нет | Определяет режим записи в таблицу. Записывать сразу по несколько записей – true, по одной – false. Пакетный режим ускоряет загрузку данных в базу данных. | batchMode="true" |
commit | нет | Определяет, после обработки скольких записей (без ошибок) выполняется коммит (возможные значения -1,0,N). | commit="10" |
maxErrorCount | нет | Максимальное количество разрешенных ошибок. При превышении этого числа ошибок граф выходит из строя. По умолчанию ошибки не допускаются. Если установлено значение -1, все ошибки разрешены. | maxErrorCount="0" |
actionOnError | нет | Действие при превышении допустимого количества ошибок maxErrorCount. Если установлено значение ROLLBACK, фиксация текущего пакета не выполняется (актуально только для Oracle). Commit для Postgres делает тоже, что и Rollback, MsSql автоматически делает Rollback. | actionOnError="commit" |
Пример. Загрузка записей из OneBridge в SQLite.
Нужно загрузить данные из OneBridge в базу данных SQLite в таблицу Tracking
, в поля client
, items
, total
.
Данные в системе:
customer | product | amount_of_purch |
---|---|---|
JazzveCoffee | Coffea arabica | 19513 |
Arabica Legasy LLC | Coffea canephora | 12735 |
BlackBean Group | Excelsa | 34010 |
Решение:
Задайте соединение с базой:
<Connection id="CONN_A" dbURL="${CONN_TYPE}://${DB_01_USR}:${DB_01_PWD}@${DB_01_HOST}:${DB_01_PORT}/${DB_01_DATABASE}"/>
Пропишите в файл задания SQL-запрос:
<Phase ...>
...
<Node id="db_writer" guiX="250" guiY="100" guiName="DatabaseWriter" dbConnection="CONN_A" type="WriterDB">
<Attr name= “sqlQuery”><![CDATA[
INSERT INTO public."Tracking" ("client", "items", "total")
VALUES ($customer, $product, $amount_of_purch)
]]></Attr>
</Node>
...
</Phase>
Чтобы вставить значения полей из системы нужно указать название полей из метаданных после знака «$».
Данные будут выгружены в базу данных, соответствующую указанному типу соединения, в таблицу Tracking.
POSTGRESQL_DATA_WRITER
POSTGRESQL_DATA_WRITER массовый загрузчик, подходящий для загрузки большого количества записей в базу данных PostgreSQL. Считывает данные через входной порт. Использует специальную утилиту Copy, которая позволяет загружать данные очень быстро. Для остальных случаев лучше использовать DATABASE_WRITER, для которого не требуется использование специальной утилиты.
Порты POSTGRESQL_DATA_WRITER:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 1-n | да | Записи для загрузки в базу данных | Любые |
Пример.
Необходимо загрузить записи с метаданными «Product» (string), «Amount» (int), «date» (date) и «Price» (float) в таблицу Products в базу данных postgres с именем пользователя user001.
Укажите параметры подключения в атрибутах шага POSTGRESQL_DATA_WRITER:
<Node database="bl" guiName="out_P0" guiX="1100" guiY="170" host="${DB_HOST}" id="OUT_P0" parameters="port="${DB_PORT}"" psqlPath="/usr/bin/psql" table="${outP0}" type="POSTGRESQL_DATA_WRITER" username="${DB_USER_BL}"/>
Данные будут внесены в базу:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
psqlPath | да | Путь к утилите copy | psqlPath="psql" |
host | нет | Имя хоста | host="10.13.109.14" |
database | да | Имя базы данных | database="postgres" |
table | да | Имя таблицы, в которую производится запись | table="${tableNameTo}" |
username | нет | Имя пользователя | username="sofiko" |
parameters | нет | Параметры, которые могут использоваться в качестве параметров утилитой psql или оператором \copy. Указывается последовательность ключ=значение, отделенные друг от друга точкой с запятой, двоеточием или вертикальной чертой. Если значение какого-либо параметра содержит точку с запятой, двоеточие или вертикальную черту, такое значение должно быть заключено в двойные кавычки. Сейчас доступны к указанию columns и port |
|
TRASH
TRASH используется для прерывания потока данных, когда не нужно передавать данные дальше. Шаг не имеет выходных портов и не имеет атрибутов.
TRASH прерывает поток данных.
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 1-n | нет | Для входящего потока записей. | Любые |
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
debugOutput | нет | По умолчанию все записи удаляются. Если установлено значение true, все записи записываются в лог на вкладку «Консоль». Этот режим поддерживается при подключении любого количества входных портов. | debugOutput="true" |