Darrell TW

n8n 自動化工作流程教學
MarTech 解決方案分享

0%

n8n Merge 節點教學-解決多來源資料合併的問題

快速導覽

什麼時候該用 Merge 節點?

為什麼需要 Merge?
最直觀的例子就從不同的地方搜集資料,然後合併在一起處理
下面用兩個場景來舉例:

場景 1:從多個平台抓取任務清單

例如工作清單散落在 Trello、Asana、Notion 三個平台
想要每天早上把三個平台的待辦事項整合成一份清單
一起發送 Slack 通知給自己

n8n_merge_node-example1_notion_asana_trello_slack
  • Trello 回傳 10 筆、Asana 回傳 5 筆、Notion 回傳 8 筆
  • Merge (Append 模式) 把三個平台的任務堆疊成一個清單(共 23 筆)
  • Aggregate 節點將 23 筆任務聚合成一筆訊息
  • 最後發送到 Slack
    使用模式:Append

場景 2:客戶資料要對應他的訂單記錄

  1. 電商訂單列表 : (user_id + 訂單資訊)
  2. 客戶列表 : (user_id + 客戶資訊)

這時候就可以用 Merge 來把兩份資料合在一起
由於兩者都有 user_id 欄位可以當作合併的 key

就可以用 Combine 模式搭配 Matching Fields 來合併

n8n_merge_node-example2_sheet_order_member_data

Merge 模式選擇

Append

Append 的效果為將不同的資料堆疊在一起,跟合併不太一樣

例如有兩個資料陣列是
["a", "a", "a"]
["b", "b", "b"]

如果用 Append 合併,會得到
["a", "a", "a", "b", "b", "b"]

可以想像成把兩條隊伍整合成一條更長的隊伍!

n8n_merge_node-use_append_example

Combine

Combine 和 Append 就不太一樣了
如果說 Append 是將兩條隊伍整合成一條更長的隊伍
那 Combine 就是將兩條隊伍合併兩兩一排,但長度維持一樣

示意圖如下:

n8n_merge_node-explain_append_combine

而 Combine 又有幾種組合的模式可以選!

Matching Fields

Matching Fields 就是會把欄位根據 key 做對應合併
以前面的舉例二來說:
訂單和會員的資料根據 user_id 做對應合併

這樣就能同時知道每一筆訂單的會員資料是什麼

n8n_merge_node-use_matching_field_example

比較好的情況就是兩份資料都有欄位叫做 user_id
這樣直接用 user_id 合併就行

不過有時候會是不同的欄位名稱,例如:
訂單的 user_id 叫做 customer_id
這樣一樣可以先選 Matching Fields
然後勾起 Fields To Match Have Different Names
也就是說:可以用這兩個不同的欄位名稱合併

n8n_merge_node-Fields_To_Match_Have_Different_Names

Position

Position 就是會把兩份資料按照順序合併在一起
其實跟前面的示意圖展示的很像
例如:
資料A : [{“green”:“🟢”}, {“green”:“🟢”}, {“green”:“🟢”}]
資料B : [{“blue”:“🔵”}, {“blue”:“🔵”}, {“blue”:“🔵”}]

如果用 Position 合併,會得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"green": "🟢",
"blue": "🔵"
},
{
"green": "🟢",
"blue": "🔵"
},
{
"green": "🟢",
"blue": "🔵"
}
]
n8n_merge_node-combine_position-demo

All Possible Combinations

All Possible Combinations 就是會把兩份資料的所有組合都合併在一起
有一個數學名詞叫做 笛卡爾積 (Cartesian Product)
這邊舉一個簡單的例子:
假設有商品會是三種尺寸搭配三種顏色
那它的規格就會有 9 種組合 (3種尺寸 * 3種顏色)

在 n8n 的世界中你也可以用 All Possible Combinations 快速得到這樣的組合

n8n_merge_node-combine_matching_all_possible

SQL Query

這就算是比較進階的用法了
適合 熟悉 SQL 且上述的合併方法都無法滿足需求 時再使用

n8n_merge_node-sql_query

SQL 小學堂

1
2
3
SELECT input1.score, input2.name 
FROM input1
LEFT JOIN input2 ON input1.student_id == input2.student_id

兩個資料 input 會分別是 input1input2
所以我們有 Left Join 的方式來合併,用 student_id 來當作合併的依據
只取出 input1.scoreinput2.name 兩個欄位

Choose Branch

這個選項就比較 Tricky
他的本質跟 Merge 就不太一樣
不是用來合併資料,而是用來等待和控制流程

n8n_merge_node-choose_branch

以截圖的例子來說明
Merge 會等到兩條 input 都執行完畢,才輸出你選擇的其中一邊資料

為什麼要這樣呢?
目前比較合理的推測是 input1 可能是我們主要的資料
只是我們需要等到 input2 執行完畢,才確保狀態或是資料是完整的
然後繼續處理 input 的資料

這邊我會想等到改天真的用到這樣的情境時再好好補充!

和 AI 的討論過程中有個比較符合的情境是

當我們今天有個主要的資料需要提交申請,但申請前我們需要驗證資料正確,所以我得等到驗證的分支跑完後,才應該繼續提交主要資料做後續的申請。

相關文章推薦

n8n If 和 Switch 節點教學 - 條件判斷完整指南

學會條件判斷節點,與 Merge 節點搭配使用

n8n If 和 Switch 節點教學 - 條件判斷完整指南
n8n Aggregate 和 Split Out 節點教學

學會資料聚合與拆分,補足 Merge 節點的應用場景

n8n Aggregate 和 Split Out 節點教學

總結

Merge 節點算是蠻多人學習 n8n 時的一個小難關
原因是資料合併的概念其實有點抽象
不像 IF 這種判斷是或否比較單純
但又其實蠻常會用到的!

希望這篇文章有打開大家對 Merge 的想像和認識