Giới thiệu
Trong các quy trình tự động hóa thực tế, dữ liệu hiếm khi chảy theo một đường thẳng. Bạn có thể lấy hồ sơ khách hàng từ CRM ở một nhánh, lấy đơn hàng gần đây từ API ở nhánh khác, và sau đó cần hợp nhất hai luồng đó thành các đối tượng thống nhất trước khi đưa xuống dòng tiếp theo. Đó chính là chức năng mà nút Merge xử lý.
Nút Merge nhận hai nhánh đầu vào riêng biệt — được gọi là Input 1 và Input 2 — và kết hợp các mục của chúng theo chiến lược bạn chọn. Việc chọn sai chế độ merge là một trong những nguồn lỗi dữ liệu thầm lặng phổ biến nhất trong n8n, khi các mục có vẻ ghép nối nhưng đầu ra không như bạn mong đợi. Hiểu sự khác biệt giữa các chế độ ngay từ đầu sẽ tiết kiệm rất nhiều công sức debug sau này.
Bốn chế độ Merge
Nút Merge của N8n cung cấp bốn chế độ: Append, Combine by Position, Combine by Key, và Multiplex. Mỗi chế độ trả lời cho một câu hỏi khác về cách các mục từ hai nhánh liên quan với nhau như thế nào.
Append chỉ ghép nối hai danh sách lại với nhau một cách đơn giản. Mọi mục từ Input 1 sẽ xuất hiện trước, sau đó là mọi mục từ Input 2. Không tạo cặp ghép. Sử dụng chế độ này khi bạn muốn một danh sách phẳng duy nhất và hai nhánh độc lập — ví dụ, ghép hai danh sách địa chỉ email riêng biệt để gửi một chiến dịch.
Combine by Position (trước đây gọi là Merge by Index) ghép các mục theo thứ tự của chúng trong danh sách. Mục 0 từ Input 1 ghép với Mục 0 từ Input 2, Mục 1 với Mục 1, và cứ thế tiếp. Các trường từ cả hai mục được ghép thành một đối tượng duy nhất. Nếu danh sách có độ dài không bằng nhau, danh sách ngắn hơn sẽ quyết định số lượng đầu ra theo mặc định.
Combine by Key ghép các mục từ hai nhánh bằng cách sử dụng một giá trị trường chia sẻ — tương tự như một SQL JOIN trên một cột. Bạn chỉ định một trường khóa ở mỗi đầu vào (chúng có thể có tên trường khác nhau), và n8n sẽ tìm các cặp có giá trị khớp.
Multiplex tạo ra mọi kết hợp có thể giữa các mục từ Input 1 và Input 2 — một tích Des cartesian. Nếu Input 1 có 3 mục và Input 2 có 4 mục, Multiplex sẽ xuất ra 12 mục. Điều này hiếm khi bạn muốn, nhưng hữu ích để tạo ra các tổ hợp như ghép mọi sản phẩm với mọi mức chiết khấu.
Ví dụ thực tế: Combine by Key
Giả sử nút HTTP Request của bạn trả về hồ sơ khách hàng ở một nhánh:
Và một HTTP Request thứ hai trả về tổng đơn hàng ở nhánh khác:
Các mục có thứ tự khác nhau và sử dụng các tên trường khác nhau cho cùng một định danh khách hàng. Trong nút Merge được thiết lập Combine by Key, bạn cấu hình Input 1 Key Field là customerId và Input 2 Key Field là id. N8n sẽ ghép C001 với C001 và C002 với C002 bất kể thứ tự, tạo ra:
Các mục từ Input 1 không có sự khớp với Input 2 sẽ bị loại bỏ theo mặc định. Bạn có thể thay đổi hành vi này trong tùy chọn Output Type, chọn giữ các mục không khớp từ Input 1, Input 2, hoặc cả hai — tương đương với LEFT, RIGHT hoặc FULL OUTER joins trong SQL.
Combine by Position Example
Combine by Position là lựa chọn đúng khi bạn biết cả hai nhánh sẽ luôn sản xuất cùng số lượng mục theo cùng thứ tự. Trường hợp điển hình là tách một danh sách, làm giàu mỗi mục thông qua hai API khác nhau song song, sau đó ghép lại các kết quả được làm giàu.
Nếu Input 1 nắm giữ hồ sơ người dùng cơ sở và Input 2 nắm giữ một điểm số từ một dịch vụ chấm điểm:
Combine by Position hợp nhất chúng theo chỉ số thành:
Nếu bạn chạy cái này trên một danh sách 50 người dùng được chia ở hai nhánh, tất cả 50 mục sẽ ghép lại một cách sạch sẽ miễn là thứ tự được bảo toàn — điều này thường đúng khi cả hai nhánh bắt đầu từ cùng một Split trong Batches hoặc SplitOut node.
Những sai lầm phổ biến
Sai lầm phổ biến nhất là sử dụng Combine by Position khi hai nhánh xử lý các phần tử với tốc độ khác nhau hoặc áp dụng lọc, khiến danh sách bị lệch nhau. Việc hợp nhất sẽ ghép các phần tử sai một cách thầm lặng. Nếu có bất kỳ khả năng thứ tự có thể khác nhau, hãy dùng Combine by Key.
Vấn đề khác là kích hoạt nút Merge trước khi cả hai nhánh hoàn thành thực thi. Trong n8n, nút Merge tự động chờ cả hai đầu vào đến nơi trước khi xử lý, nhưng điều này chỉ hoạt động đúng khi cả hai nhánh có nguồn gốc từ cùng một nút upstream. Nếu bạn kết nối các đường kích hoạt không liên quan vào một nút Merge để kỳ vọng đồng bộ hóa, hành vi sẽ không xác định và thường tạo ra các lần chạy trùng lặp.
Cuối cùng, hãy để ý đến sự trùng lặp tên trường. Khi hai phần tử có chung một tên trường và bạn kết hợp chúng, giá trị từ Input 2 sẽ ghi đè lên giá trị từ Input 1 theo mặc định. Đổi tên các trường gây xung đột ở upstream bằng một Set node trước khi ghép nếu bạn muốn bảo toàn cả hai giá trị.
Tóm tắt
Nút Merge là xương sống của các workflow nhiều nhánh trong n8n. Append ghép danh sách thành chuỗi, Combine by Position ghép theo thứ tự, Combine by Key ghép theo một giá trị trường dùng chung, và Multiplex sinh ra mọi kết hợp. Quyết định then chốt luôn là hai luồng dữ liệu của bạn có mối quan hệ cấu trúc hay không — nếu có, hãy dùng Combine by Key để đảm bảo độ tin cậy; nếu đảm bảo có thứ tự và độ dài bằng nhau, Combine by Position đơn giản hơn. Đặt đúng lựa chọn này sẽ ngăn ngừa một lớp lớn lỗi integrity dữ liệu tinh vi.
Bài kiểm tra cuối bài
Ôn lại kiến thức, thử sức và nhận góp ý cho bài làm.