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 нет

Запрос к базе. Обращение по имени поля производится с помощью специального символа $.


        insert into test_table (num,str,test_date) 
        values($num,$str,$test_date) 
        returning str;

batchMode нет Определяет режим записи в таблицу. Записывать сразу по несколько записей – true, по одной – false. Пакетный режим ускоряет загрузку данных в базу. batchMode="true"
batchSize нет Количество записей, которое можно отправить в базу данных за одно пакетное обновление (в одном sql скрипте). Актуально если batchMode="true". batchSize="5"
commit нет Определяет, после обработки скольких записей (без ошибок) выполняется коммит (фиксация записей в базе данных). Возможные значения -1,0,N:
  • commit = N - коммит делается после обработки N записей, команд при этом выполнится N*количество команд в шаге.
  • commit = 0 - коммит не делается внутри партии. если commit < batchSize, то мы считаем, что commit = batchSize, фиксируем в конце каждой партии; если commit > batchSize, но не кратен ему, то мы округляем значение вверх до первого кратного размеру batchSize. Примеры: commit = 3, batchSize = 10 => commit = 10 commit = 15, batchSize = 10 => commit = 20 commit = 20, batchSize = 10 => commit = 20 commit = 25, batchSize = 10 => commit = 30
  • commit = -1 - Если установлено такое значение, компонент никогда не выполняет фиксацию, то есть до тех пор, пока соединение не будет закрыто во время освобождения графа.коммит делается только в конце обработки всех записей
commit="10"
maxErrorCount нет Максимальное количество разрешенных ошибок. При превышении этого числа ошибок граф выходит из строя. По умолчанию ошибки не допускаются. Если установлено значение -1, все ошибки разрешены. maxErrorCount="0"
actionOnError нет Действие при превышении допустимого количества ошибок maxErrorCount. Если установлено значение ROLLBACK, фиксация текущего пакета не выполняется (актуально только для Oracle). Commit для Postgres делает тоже, что и Rollback, MsSql автоматически делает Rollback. actionOnError="commit"

Пакетный режим и размер пакета

Пакетный режим ускоряет загрузку данных в базу данных.

Оператор возврата недоступен в пакетном режиме.

Помните, что некоторые базы данных возвращают как отклоненные больше записей, чем реально отклонено. Эти базы данных возвращают даже те записи, которые были успешно загружены в базу данных, и отправляют их через выходной порт 0 (если он подключен).

  1. batchMode
  2. batchSize

Пример. Загрузка записей из 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.