DBJOIN

DBJOIN получает данные через один входной порт и объединяет их с данными из таблицы базы данных. Эти два источника данных могут иметь разную структуру метаданных.
Шаг DBJOIN не требует сортировки входных данных и работает очень быстро, поскольку данные обрабатываются в памяти.
После объединения к данным применяется преобразование и результат отправляется на первый выходной порт. Второй выходной порт может использоваться для вывода несовпадающих по ключу записей из основного потока.
Поток, передающий данные через первый входной порт, называется основным, а поток данных из базы называется подчинённым. Его данные считаются поступившими через виртуальный входной порт. Каждая основная запись сопоставляется с подчинённой записью по одному или нескольким полям, называемым ключом соединения.
Порты DBJOIN:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | да | Главный входной порт | Любые |
1 (виртуальный) | да | Подчинённый входной порт | ||
Output | 0 | да | Выходной порт для объединенных данных | |
1 | нет | Выходной порт для необъединённых данных | Как на Input 0 |
Атрибуты DBJOIN:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
joinKey | да | Ключ, по которому объединяются входящие потоки данных. Если полей ключа несколько - они должны быть записаны через точку с запятой. Перед именем поля должен стоять знак доллара `$`. |
|
joinType | нет | Тип объединения. Бывает "inner"(по умолчанию) и "leftOuter" | joinType="leftOuter" |
dbConnection | да | Идентификатор соединения с БД, который будет использоваться в качестве ресурса подчинённых записей. | conn0 |
sqlQuery | да | SQL-запрос. В условии WHERE нужно использовать плейсхолдер '?' для подстановки значения ключа (если ключ составной, используйте плейсхолдер для каждого поля в WHERE). |
|
url | да | Имя внешнего файла, включая путь, содержащий SQL-запрос. |
|
transform | да | Функция преобразования |
|
cacheSize | Максимальное количество записей с разными значениями ключей, которые можно сохранить в памяти. |
| |
charset | Кодировка файла, в котором хранится алгоритм преобразования. |
|
Ключ соединения
Ключ соединения — это последовательность имен полей из основного источника данных, отделенных друг от друга точкой с запятой. Ключ можно определить в редакторе шага. Порядок имен полей должен соответствовать порядку ключевых полей таблицы базы данных (и их типам данных). Подчинённая часть ключа соединения должна быть определена в атрибуте sqlQuery
.
$first_name;$last_name
Это поля, которые служат для объединения основных записей с подчинёнными записями. SQL-запрос должен содержать выражение, которое может выглядеть следующим образом:
... where fname=? and lname=?
Значение first_name
будет подставлено на место первого знака вопроса в этом условии, а last_name
- на место второго. Сначала будет произведён поиск совпадений по joinKey
в кеш-памяти, если подходящих записей не обнаружится, то данные будут запрошены из базы данных, иначе - найденная запись сразу отправится для преобразования в функцию transform
.
Преобразование
Преобразование в DBJOIN позволяет определить способ сопоставления данных, с помощью которого записи буду отправлены на первый выходной порт. Несоединенные записи из основного потока, отправляемые на второй выходной порт, не могут быть изменены в рамках преобразования DBJOIN.
Заметка: Если преобразование указано во внешнем файле, рекомендуется явно указать кодировку файла в артибуте
charset
.
Заметка:
- при получении более одной записи из базы в лог будет выведено предупреждение "read more than one record".
- при автоматическом увеличении рамера кеша для обработки данных - "riched cache size".
Пример. Соединение записей из двух источников.
- Объединим записи из двух баз. Используем DB_READER для чтения из базы postgres и DBJOIN для чтения из firebird и объединения потоков по ключу.
Запрос для DB_READER:
sqlQuery = "select bigintcolumn, booleancolumn, charcolumn, smallintcolumn, textcolumn from onebridge."million_row" order by bigintcolumn limit 100"
Атрибуты для DBJOIN:
sqlQuery = "select FIRST 100 bigintcolumn, booleancolumn, charcolumn, smallintcolumn, textcolumn from MILLION_ROW WHERE bigintcolumn = ?"
Объединённые данные можно вывести на первый выходной порт DBJOIN, а не обьединенные данные с главного входного порта - на второй порт.