MERGE_JOIN
Объединяет данные из двух или более источников данных по общему ключу. Данные должны быть отсортированы перед подачей в этот шаг.
MERGE_JOIN получает данные через два или более входных порта, каждый из которых может иметь различную структуру метаданных. Затем объединенные данные отправляются на первый выходной порт. Необъединенные данные можно вывести на второй выходной порт.
Порты MERGE_JOIN:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | да | Главный входной порт | любые |
1 | да | Ведомый входной порт | ||
2-n | нет | Дополнительные ведомые входные порты | ||
Output | 0 | да | Выходной порт для объединенных данных | |
1 | нет | Выходной порт для необъединённых данных | как на Input 0 |
Типы полей метаданных на первом входном и втором выходном портах должны быть одинаковыми, имена полей при этом могут отличаться.
Атрибуты MERGE_JOIN:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
joinKey | да | Ключ, который используется для объединения входящих потоков данных. Части ключа, соответствующие определенным входным портам, отделяются друг от друга хэшем '#'. Порядок полей в ключе должен соответствовать порядку входных портов. Поля тз одного порта внутри joinKey отделяются друг от друга точкой с запятой. Каждому имени поля должен предшествовать знак доллара '$'. В скобках после полей, по которым производилась сортировка, нужно указать её направление. | joinKey="$name(a);$color(d)#$product;$tint;#$name;$tone" |
joinType | нет | Тип объединения. | inner (по умолчанию) | leftOuter |
transform | да | Преобразование, определенное в файле задания на внутреннем языке системы. |
|
slaveDuplicates | нет | Если установлено значение true, разрешены записи с повторяющимися значениями ключей. Если false, для объединения используется только последняя запись. По умолчанию true. | slaveDuplicates="false" |
Пример. Объединить записи из двух потоков по ключу.
- Описать метаданные
- Переместить шаги на рабочую область.
- Соединить шаги ребрами и назначить им метаданные.
- Заполнить атрибуты MERGE_JOIN:
joinKey = "$s1(a);$s3#$m1(a);$m3"
joinType = "leftOuter"
transform =
function transform() {
$out[0].s = $in[0].s1 + $in[1].m1;
$out[0].m = $in[0].s3 + $in[1].m3;
return ALL;
}
slaveDuplicates = "false"
equalNull = "true"
- Данные с двух потоков будут объединены.