MERGE_JOIN

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

MERGE_JOIN получает данные через два или более входных порта, каждый из которых может иметь различную структуру метаданных. Затем объединенные данные отправляются на первый выходной порт. Необъединенные данные можно вывести на второй выходной порт.

Порты MERGE_JOIN:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0даГлавный входной портлюбые
1даВедомый входной порт
2-nнетДополнительные ведомые входные порты
Output0даВыходной порт для объединенных данных
1нетВыходной порт для необъединённых данныхкак на Input 0

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

Атрибуты MERGE_JOIN:

АтрибутОбязательныйОписаниеВозможные значения
joinKeyдаКлюч, который используется для объединения входящих потоков данных. Части ключа, соответствующие определенным входным портам, отделяются друг от друга хэшем '#'. Порядок полей в ключе должен соответствовать порядку входных портов. Поля тз одного порта внутри joinKey отделяются друг от друга точкой с запятой. Каждому имени поля должен предшествовать знак доллара '$'. В скобках после полей, по которым производилась сортировка, нужно указать её направление.joinKey="$name(a);$color(d)#$product;$tint;#$name;$tone"
joinTypeнетТип объединения.inner (по умолчанию) | leftOuter
transformдаПреобразование, определенное в файле задания на внутреннем языке системы.
<attr name="transform"><![CDATA[
    function transform() {
        $out[0].id = $in[0].id;
        $out[0].name = $in[0].name;

        return ALL;
    }
    ]]>
</attr>
slaveDuplicatesнетЕсли установлено значение true, разрешены записи с повторяющимися значениями ключей. Если false, для объединения используется только последняя запись. По умолчанию true.slaveDuplicates="false"

Пример. Объединить записи из двух потоков по ключу.

  1. Описать метаданные
  2. Переместить шаги на рабочую область.
  3. Соединить шаги ребрами и назначить им метаданные.
  4. Заполнить атрибуты 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"

  1. Данные с двух потоков будут объединены.