Для записи данных

Шаги для записи данных могут записывать данные в локальные выходные файлы, отправлять их через подключенный дополнительный выходной порт или вставлять в таблицу базы данных.

Шаги для записи — это компоненты графа, которые выполняются последними, поэтому они не имеют выходных портов.

Каждый шаг для записи должен иметь хотя бы один входной порт, через который данные поступают в этот компонент графа.

Шаги для записи могут либо добавлять данные в существующий файл или таблицу базы данных, либо заменять существующее содержимое новым. Для этой цели шаги для записи в файлы имеют атрибут 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:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0даДля входящего потока записейЛюбые

Атрибуты 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=">/~~/<"
1

По умолчанию значение этого атрибута наследуется из метаданных порта ?ввода? 0.

Пример. Запись данных в файл.

Например, нужно записать обработанные системой данные в файл, используя разделитель «|».

Данные в системе:

datelast_namefirst_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:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0даЗаписи для загрузки в базу данныхЛюбые
Output0нетДля отклонённых записейТакие же, как на выходном порте
Output1нетДля возвращённых записейТакие же, как на выходном порте

Атрибуты DATABASE_WRITER:

АтрибутОбязательныйОписаниеВозможные значения
dbConnection да

Параметры соединения с базой данных. В список параметров для подключения могут входить: database, user, password, host, port.
Параметры можно указать в атрибуте конкретного шага либо в глобальных параметрах графа.

dbConnection="postgres://admin:admin@localhost:5432/dev"  
sqlQuery нет Запрос к базе
            <Attr name="sqlQuery"> <![CDATA[
                INSERT INTO public."Customers" (id, surname, name)
                VALUES (16, 'surname16', 'name16');
                ]]>
            </Attr> 


<attr name="sqlQuery">
    <![CDATA[
        insert into test_table (num,str,test_date) 
        values($num,$str,$test_date) 
        returning str;
    ]]>
</attr>
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.

Данные в системе:

customerproductamount_of_purch
JazzveCoffeeCoffea arabica19513
Arabica Legasy LLCCoffea canephora12735
BlackBean GroupExcelsa34010

Решение:

Задайте соединение с базой:


<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:

Тип портаНомерОбязательныйОписаниеМетаданные
Input1-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=&quot;${DB_PORT}&quot;" psqlPath="/usr/bin/psql" table="${outP0}" type="POSTGRESQL_DATA_WRITER" username="${DB_USER_BL}"/>

Данные будут внесены в базу:

POSTGRESQL_DATA_WRITER записывает данные в базу PostgreSQL

Атрибуты POSTGRESQL_DATA_WRITER

АтрибутОбязательныйОписаниеВозможные значения
psqlPathдаПуть к утилите copypsqlPath="psql"
hostнетИмя хостаhost="10.13.109.14"
databaseдаИмя базы данныхdatabase="postgres"
tableдаИмя таблицы, в которую производится записьtable="${tableNameTo}"
usernameнетИмя пользователяusername="sofiko"
parametersнетПараметры, которые могут использоваться в качестве параметров утилитой psql или оператором \copy. Указывается последовательность ключ=значение, отделенные друг от друга точкой с запятой, двоеточием или вертикальной чертой. Если значение какого-либо параметра содержит точку с запятой, двоеточие или вертикальную черту, такое значение должно быть заключено в двойные кавычки. Сейчас доступны к указанию columns и port
parameters="port=&quot;${DB_PORT}&quot;|columns=&quot;in_market_sale_channel_gid,date_from,hashsum&quot;"

TRASH

TRASH используется для прерывания потока данных, когда не нужно передавать данные дальше. Шаг не имеет выходных портов и не имеет атрибутов.

TRASH прерывает поток данных.

TRASH прерывает поток данных

Порты TRASH:

Тип портаНомерОбязательныйОписаниеМетаданные
Input1-nнетДля входящего потока записей.Любые

Атрибуты TRASH:

АтрибутОбязательныйОписаниеВозможные значения
debugOutputнетПо умолчанию все записи удаляются. Если установлено значение true, все записи записываются в лог на вкладку «Консоль». Этот режим поддерживается при подключении любого количества входных портов.debugOutput="true"