В этом уроке вы узнаете как два потока данных могут взаимодействовать друг с другом
Упражнения
- Создание данных. Скопируйте ссылку https://artemdzyuba.ru/wp-content/uploads/2023/01/Merge__Tasks.json и импортируйте в n8n (Add Workflow → ⋮ → Import from URL…). Соедините эти узлы со Start, запустите.
Как вы видите, первый узел содержит данные по Шерлоку Холмсу и Доктору Ватсону, а второй — по их врагу Профессору Мориарти. Названия свойств у них различаются на “_”, кроме поля Полное имя — это сделано специально.
Под каждую операцию вам надо создавать новый узел Merge и соединять его с обоими узлами Code. - Объедините всех троих героев в общий поток данных с помощью режима
Append. - Мы хотим из первого списка оставить только тех персонажей, у кого основные интересы совпадают с любыми интересами второй стороны. Для этого используем
Combine / Merge By Fields / Keep Matchesи соответствующие поля. Должен остаться только Шерлок Холмс, т.к. основные интересы доктора всё же не совпадают с интересами профессора. - Теперь давайте добавим столбцы второго потока к столбца первого потока, но по номеру. Сначала посмотрим на 1-е элементы там и там, соединим. Потом 2-е, и так далее. Для этого нужен
Combine / Merge By Position. Тип соединения выберите такой, чтобы на выходе остались и Холмс, и Ватсон. Холмс будет дополнен данными от Мориарти.
Обратите внимание, что имя Холмса сменится на Мориарти. Это произошло потому, что названия свойств с именем у них совпадали. Данные второго потока перезаписали данные первого. Чтобы это изменить, добавьте опцию Clash Handling, и укажите, какое свойство оставлять — из второго входа, из первого, или из обоих (тогда им присвоятся суффиксы _1 и _2).
Кроме того, Доктор Ватсон отвалился, т.к. для него не нашлось пары во втором потоке. Чтобы он остался, надо добавить и включить опцию Include Any Unpaired Items. - Теперь сделаем присоединение данных более “умным” с помощью
. Пусть к данным первого потока “приклеиваются” данные из второго. Надо только указать свойство, по которому они будут склеиваться. Для начала, укажите свойства, обозначающие город. Поскольку все трое находятся в Лондоне, то данные Мориарти прикрепятся и к Холмсу, и к Ватсону.Combine / Merge By Fields / Enrich Input 1
Но что это, у нас опять заменились имена, причем у обоих. Здесь так же может помочь опция Clash Handling. - Замените склейку по городу склейкой по интересам. Теперь к Ватсону ничего не присоединяется, так как его интересы не пересекаются с интересами элементов второго потока (в котором один только Мориарти).
- Наконец, можно просто соединить каждый элемент первого входа с каждым элементом второго входа. Используйте
Combine / Multiplex. - Проигнорируйте всё, что пришло на первый вход и пропустите только второй, с помощью режима
Choose Branch / Wait For Both Inputs To Arrive.
Это бывает полезно, когда данные надо не пропустить дальше, но оставить возможность обращаться к ним в следующих узлах. - А что, если нам надо исключить из первого потока те записи, которые как-то пересекаются со вторым? В нашем случае, исключить из первого входа всех, кто интересуется криминалом. Для этого включите
Combine / Merge By Fields / Keep Non-Matchesи укажите свойства, отвечающие за интересы. - Наконец, последний режим. Он просто регистрирует, что оба входящих потока отработали, и посылает дальше пустой поток. Поставьте режим
Choose Branch / Wait For Both Inputs To Arrive / A Single Empty Item, добавьте узел Set и введите в нем поле Статус со значением Оба процесса обработаны. - Запустите эту невероятную сеть связей и посмотрите на результат в целом.
Отметьте все решенные задачи на странице шаблона упражнений Узел Merge.