Перейти к содержимому

4. Объединяем данные с узлом Merge

В этом уроке вы узнаете как два потока данных могут взаимодействовать друг с другом

Упражнения

  1. Создание данных. Скопируйте ссылку https://artemdzyuba.ru/wp-content/uploads/2023/01/Merge__Tasks.json и импортируйте в n8n (Add WorkflowImport from URL…). Соедините эти узлы со Start, запустите.

    Как вы видите, первый узел содержит данные по Шерлоку Холмсу и Доктору Ватсону, а второй — по их врагу Профессору Мориарти. Названия свойств у них различаются на “_”, кроме поля Полное имя — это сделано специально.

    Под каждую операцию вам надо создавать новый узел Merge и соединять его с обоими узлами Code.
  2. Объедините всех троих героев в общий поток данных с помощью режима Append.
  3. Мы хотим из первого списка оставить только тех персонажей, у кого основные интересы совпадают с любыми интересами второй стороны. Для этого используем Combine / Merge By Fields / Keep Matches и соответствующие поля. Должен остаться только Шерлок Холмс, т.к. основные интересы доктора всё же не совпадают с интересами профессора.
  4. Теперь давайте добавим столбцы второго потока к столбца первого потока, но по номеру. Сначала посмотрим на 1-е элементы там и там, соединим. Потом 2-е, и так далее. Для этого нужен Combine / Merge By Position. Тип соединения выберите такой, чтобы на выходе остались и Холмс, и Ватсон. Холмс будет дополнен данными от Мориарти.

    Обратите внимание, что имя Холмса сменится на Мориарти. Это произошло потому, что названия свойств с именем у них совпадали. Данные второго потока перезаписали данные первого. Чтобы это изменить, добавьте опцию Clash Handling, и укажите, какое свойство оставлять — из второго входа, из первого, или из обоих (тогда им присвоятся суффиксы _1 и _2).

    Кроме того, Доктор Ватсон отвалился, т.к. для него не нашлось пары во втором потоке. Чтобы он остался, надо добавить и включить опцию Include Any Unpaired Items.
  5. Теперь сделаем присоединение данных более “умным” с помощью Combine / Merge By Fields / Enrich Input 1. Пусть к данным первого потока “приклеиваются” данные из второго. Надо только указать свойство, по которому они будут склеиваться. Для начала, укажите свойства, обозначающие город. Поскольку все трое находятся в Лондоне, то данные Мориарти прикрепятся и к Холмсу, и к Ватсону.

    Но что это, у нас опять заменились имена, причем у обоих. Здесь так же может помочь опция Clash Handling.
  6. Замените склейку по городу склейкой по интересам. Теперь к Ватсону ничего не присоединяется, так как его интересы не пересекаются с интересами элементов второго потока (в котором один только Мориарти).
  7. Наконец, можно просто соединить каждый элемент первого входа с каждым элементом второго входа. Используйте Combine / Multiplex.
  8. Проигнорируйте всё, что пришло на первый вход и пропустите только второй, с помощью режима Choose Branch / Wait For Both Inputs To Arrive.

    Это бывает полезно, когда данные надо не пропустить дальше, но оставить возможность обращаться к ним в следующих узлах.
  9. А что, если нам надо исключить из первого потока те записи, которые как-то пересекаются со вторым? В нашем случае, исключить из первого входа всех, кто интересуется криминалом. Для этого включите Combine / Merge By Fields / Keep Non-Matches и укажите свойства, отвечающие за интересы.
  10. Наконец, последний режим. Он просто регистрирует, что оба входящих потока отработали, и посылает дальше пустой поток. Поставьте режим Choose Branch / Wait For Both Inputs To Arrive / A Single Empty Item, добавьте узел Set и введите в нем поле Статус со значением Оба процесса обработаны.
  11. Запустите эту невероятную сеть связей и посмотрите на результат в целом.

Отметьте все решенные задачи на странице шаблона упражнений Узел Merge.

Следующий урок → Обрабатываем списки с узлом Item Lists
Предыдущий урок → Выражения (Expressions) и узел Set
К курсу → Автоматизация с n8n: теория и практика
Мои курсы выходят в открытый доступ!