Оператор Merge предназначен для объединения нескольких входных таблиц в одну результирующую таблицу. Он позволяет комбинировать данные из разных источников с возможностью изменения наименования полей и выбора способа объединения.
Оператор Merge используется для:
- Объединения данных из нескольких таблиц в одну
- Создания декартова произведения таблиц (M x N)
- Последовательного объединения таблиц (M | N)
- Комбинирования данных с различной структурой
- Входные таблицы (
in) - множественные порты для подключения исходных таблиц
- Каждый входной порт можно переименовать для удобства идентификации
- Результат (
out) - выходной порт с объединенными данными
- Все - используются все столбцы из входных таблиц
- Выборочно - возможность выбора конкретных столбцов (функция не поддерживается в текущей версии)
По порядку (M x N)
- Создает декартово произведение всех входных таблиц
- Каждая строка первой таблицы объединяется с каждой строкой второй таблицы
- Результат: количество строк = произведение количества строк всех таблиц
По порядку (M | N)
- Последовательное объединение таблиц
- Строки объединяются попарно по порядку
- При достижении конца одной таблицы:
- Циклический обход (опционально) - начинать чтение таблицы сначала
- Без циклического обхода - использовать null для недостающих строк
-
Инициализация: Оператор сбрасывает все входные порты и очищает выходной порт
-
Обработка: В зависимости от выбранного типа объединения:
Для типа "M x N":
- Читает все строки из первой таблицы
- Для каждой строки рекурсивно объединяет с остальными таблицами
- Создает все возможные комбинации строк
Для типа "M | N":
- Читает строки из таблиц последовательно
- Объединяет строки попарно по порядку
- При необходимости использует циклический обход
-
Завершение: Записывает результат в выходной порт и завершает выполнение
Оператор использует функцию JSB.merge({}, row, el) для объединения объектов строк:
- Первый аргумент
{} - пустой объект для результата
- Второй аргумент
row - накопленные данные предыдущих таблиц
- Третий аргумент
el - текущая строка из обрабатываемой таблицы
Входные данные:
Таблица A: [1, 2]
Таблица B: [A, B]
Результат:
[1, A]
[1, B]
[2, A]
[2, B]
Входные данные:
Таблица A: [1, 2, 3]
Таблица B: [A, B]
Результат (без циклического обхода):
[1, A]
[2, B]
[3, null]
Результат (с циклическим обходом):
[1, A]
[2, B]
[3, A]
- Объединение справочников - когда нужно создать все возможные комбинации значений
- Добавление атрибутов - когда нужно дополнить основную таблицу данными из справочников
- Создание тестовых данных - для генерации комбинаций параметров
- Декартово произведение может привести к экспоненциальному росту количества строк
- Большие таблицы могут значительно увеличить время обработки
- Память - результирующая таблица может быть очень большой
- Фильтрация данных перед объединением
- Использование индексов для ускорения доступа к данным
- Ограничение размера входных таблиц
- Выборочное использование столбцов в настоящее время недоступно (закомментировано)
- Объединение по ключевым полям не поддерживается в текущей версии
- Типы данных должны быть совместимыми для объединения
- Пустой результат - проверьте подключение входных портов
- Неожиданное количество строк - проверьте тип объединения
- Ошибки типов данных - убедитесь в совместимости структур таблиц