CROSS_JOIN

CROSS_JOIN создает декартово произведение записей из подключенных входных портов.

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

CROSS_JOIN автоматически передаёт метаданные на выходной порт в соответствии с метаданными на его входных портах.

Заметка: при обработке очень большого количества записей, на жёстком диске могут быть созданы временные файлы с обрабатываемыми записями. Это предотвращает чрезмерное использование оперативной памяти.

Порты CROSS_JOIN:

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

Атрибуты CROSS_JOIN:

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

нет

Функция преобразования данных, определённая в графе

<attr name="transform"><![CDATA[
    function transform() {
        $out[0].id = $in[1].id;
        $out[0].name = $in[1].name;
        $out[0].test_data_id = $in[0].test_data_id;
        $out[0].tmstmp = $in[0].tmstmp;
        $out[0].category_id = $in[0].category_id;

        return ALL;
    }
    ]]>
</attr>

Пример.

Создать таблицу со всеми возможными сочетаниями игроков в бильярд из двух команд:

Игроки первой команды:

Вася
Маша
Никита

Игроки второй команды:

Алёна
Петя
Лиза

Решение: Нужно только подключить источники данных к портам компонента CROSS_JOIN. Настройка атрибутов компонента не требуется.

В результате получится такой набор пар игроков в бильярд:

Вася | Алёна
Вася | Петя
Вася | Лиза
Маша | Алёна
Маша | Петя
Маша | Лиза
Никита | Алёна
Никита | Петя
Никита | Лиза

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