ادغام
Merge
ترکیب و ادغام دادهها از چند منبع مختلف
نمای کلی
نود Merge به شما اجازه میدهد دادههای ورودی از 2 یا چند نود را با هم ترکیب کنید.
قابلیتهای کلیدی:
- ترکیب دادهها از چند منبع
- ادغام بر اساس کلید مشترک (Key)
- انتخاب روش ادغام (Append, Merge by Key, Wait, ...)
- حفظ یا حذف تکراریها
- اولویتدهی به یکی از ورودیها
کاربردها:
- ترکیب اطلاعات از چند API
- یکپارچهسازی دادههای کاربر از منابع مختلف
- ادغام نتایج Search از چند منبع
- همگامسازی دیتابیسها
- ترکیب دادههای اصلی با متادیتا
حالتهای Merge:
- Append: الحاق دادهها به هم (یکی پشت سر دیگری)
- Merge By Key: ادغام بر اساس کلید مشترک
- Merge By Position: ادغام بر اساس موقعیت (ردیف به ردیف)
- Multiplex: ترکیب هر ردیف ورودی 1 با همه ردیفهای ورودی 2
- Wait: منتظر بماند تا همه ورودیها آماده شوند
احراز هویت
احراز هویت
نود Merge نیاز به احراز هویت ندارد.
این نود فقط دادههای ورودی را ترکیب میکند و به هیچ سرویس خارجی متصل نمیشود.
نکات کاربردی:
- حداقل 2 ورودی نیاز است
- میتوانید بیش از 2 ورودی داشته باشید
- ترتیب ورودیها مهم است (Input 1, Input 2, ...)
عملیاتهای موجود
append
دادهها را یکی پشت سر دیگری قرار میدهد
mergeByKey
ادغام بر اساس یک فیلد مشترک (مثل ID)
mergeByPosition
ردیف اول با ردیف اول، دوم با دوم، ...
multiplex
هر ردیف ورودی 1 با همه ردیفهای ورودی 2 ترکیب میشود
کاربردهای متداول
1. ترکیب اطلاعات کاربر از چند جدول
ادغام اطلاعات پایه با آدرس و سفارشات:
Workflow:
[MySQL: Users] ────┐
├──→ Merge (by userId) → خروجی کامل
[MySQL: Addresses] ┘Merge Settings:
- Mode: Merge By Key
- Key Input 1: userId
- Key Input 2: userId
- Join Mode: Left (همه کاربران، حتی بدون آدرس)
2. ترکیب نتایج جستجو از چند منبع
جستجوی محصول در چند فروشگاه:
Workflow:
[HTTP: Shop1 API] ──┐
[HTTP: Shop2 API] ──┼──→ Merge (Append) → لیست کامل
[HTTP: Shop3 API] ──┘Merge Settings:
- Mode: Append
- Result: لیست یکپارچه از همه فروشگاهها
3. ادغام داده اصلی با متادیتا
اطلاعات محصول + موجودی انبار:
Workflow:
[Database: Products] ─┐
├──→ Merge (by productId)
[API: Inventory] ─────┘خروجی:
{
"id": 123,
"name": "لپتاپ",
"price": 15000000,
"stock": 5, // از API موجودی
"warehouse": "تهران" // از API موجودی
}4. ترکیب لیست کاربران با آمار فعالیت
کاربران + تعداد سفارشات:
Workflow:
[SELECT * FROM users] ────────┐
├──→ Merge (by userId)
[SELECT userId, COUNT(*) ...] ┘5. یکپارچهسازی داده از CRM و Email Marketing
ترکیب اطلاعات مشتری:
Workflow:
[HubSpot: Contacts] ──┐
├──→ Merge (by email)
[Mailchimp: List] ────┘6. ادغام قیمت با نرخ ارز
محاسبه قیمت نهایی:
Workflow:
[Products with USD price] ──┐
├──→ Merge (Multiplex) → محاسبه
[Current Exchange Rate] ────┘Multiplex: هر محصول × نرخ ارز
7. ترکیب دادههای تاریخی با جدید
بروزرسانی اطلاعات:
Workflow:
[Old Data] ──┐
├──→ Merge (by ID, Prefer Input 2)
[New Data] ──┘8. جمعآوری فایلها از چند منبع
دانلود از چند سرویس:
Workflow:
[Google Drive] ──┐
[Dropbox] ───────┼──→ Merge (Append) → لیست کامل فایلها
[OneDrive] ──────┘9. ترکیب کاربران فعال و غیرفعال
لیست کامل با Status:
Workflow:
[Active Users] ──┐
├──→ Merge (Append) → همه کاربران
[Inactive Users] ┘10. پر کردن اطلاعات خالی
استفاده از داده پیشفرض برای فیلدهای خالی:
Workflow:
[User Data] ────────┐
├──→ Merge (by ID, Fill Empty)
[Default Values] ───┘نکات حرفهای
💡 نکات حرفهای:
- 1انتخاب حالت Merge:
- Append: یکی پشت سر دیگری (مثل concat)
- Merge By Key: ادغام جدولها (مثل SQL JOIN)
- Merge By Position: ردیف به ردیف (زیپ کردن)
- Multiplex: ضرب دکارتی (هر با همه)
- 1Join Modes در Merge By Key:
Inner Join: فقط مشترکها
Left Join: همه Input 1 + مطابقهای Input 2
Outer Join: همه از هر دو طرف- 1کلید مطابقت: مطمئن شوید فیلد Key در هر دو ورودی یکسان است:
❌ Input 1: userId, Input 2: user_id (اشتباه)
✅ Input 1: userId, Input 2: userId (صحیح)- 1چند ورودی: میتوانید بیش از 2 ورودی داشته باشید، اما فقط Append کار میکند.
- 1Multiplex Use Case: زمانی استفاده کنید که میخواهید هر آیتم را با همه آیتمهای دیگر ترکیب کنید:
محصولات × نرخ ارز
کاربران × قالب پیام- 1Performance: Merge By Key روی دیتاست بزرگ میتواند کند باشد. اگر امکان دارد، در دیتابیس JOIN کنید.
- 1پیشپردازش: از Set قبل از Merge برای یکسانسازی فرمت استفاده کنید.
- 1حذف تکراری: بعد از Append، از Set (Keep Only Unique) استفاده کنید.
- 1فیلدهای خالی: در Merge By Key، فیلدهای نامطابق null میشوند:
{
"name": "علی", // از Input 1
"email": "...", // از Input 1
"address": null // نبود در Input 1، از Input 2
}- 1ترتیب ورودیها: در Merge By Key، ورودی 1 اصلی است:
- Left Join: همه Input 1 نگه داشته میشود
- فیلدهای Input 2 به Input 1 اضافه میشود
- 1Debug: از Execute Node برای دیدن داده هر ورودی قبل از Merge استفاده کنید.
- 1مثال Merge By Position:
Input 1: [{a:1}, {a:2}, {a:3}]
Input 2: [{b:10}, {b:20}]
Output: [{a:1,b:10}, {a:2,b:20}, {a:3}]- 1Wait Mode: اگر ورودیها ممکن است در زمانهای مختلف برسند:
Mode: Wait- 1Conflict Resolution: اگر فیلدی در هر دو ورودی وجود دارد:
- Input 2 اولویت دارد (مقدار Input 2 نگه داشته میشود)
- 1SQL Equivalent:
-- Merge By Key (Inner Join)
SELECT * FROM input1
JOIN input2 ON input1.id = input2.id
-- Merge By Key (Left Join)
SELECT * FROM input1
LEFT JOIN input2 ON input1.id = input2.id
-- Append
SELECT * FROM input1
UNION ALL
SELECT * FROM input2رفع مشکلات
خطاهای رایج
1. دادهها تکرار میشوند
علت: از Append استفاده کردهاید و دادههای مشترک دارید
راهحل
- از Merge By Key استفاده کنید
- یا با Set، تکراریها را حذف کنید
2. بعضی دادهها ادغام نمیشوند
علت: کلید ادغام (Key) مطابقت ندارد
راهحل
- مطمئن شوید نام فیلد در هر دو ورودی یکسان است
- یا از Set قبل از Merge، فیلد را یکسان کنید
- حساس به حروف بزرگ/کوچک است:
userId≠UserId
3. خطای "No data in input 2"
علت: ورودی دوم خالی است
راهحل
- مطمئن شوید نود ورودی 2 داده دارد
- از IF قبل از Merge استفاده کنید تا خالی نباشد
4. تعداد ردیفهای خروجی کم است
علت: Join Mode نادرست است
راهحل
- Inner Join: فقط ردیفهای مشترک
- Left Join: همه ردیفهای ورودی 1 + ورودی 2 مطابق
- Outer Join: همه ردیفهای هر دو ورودی
5. فیلدها با هم ترکیب نمیشوند
علت: از Append استفاده کردهاید
راهحل
- Append فقط ردیفها را زیر هم میچیند
- برای ترکیب فیلدها از Merge By Key یا By Position استفاده کنید
6. Multiplex خیلی زیاد داده تولید میکند
علت: رفتار عادی است! Multiplex = تعداد ورودی1 × تعداد ورودی2
راهحل
- اگر ورودی 1 = 10 آیتم، ورودی 2 = 5 آیتم → خروجی = 50 آیتم
- از Multiplex فقط وقتی استفاده کنید که واقعاً نیاز دارید
7. ترتیب دادهها اشتباه است
علت: Merge ترتیب خاصی ندارد
راهحل
- بعد از Merge، از Sort استفاده کنید
- یا قبل از Merge، ورودیها را مرتب کنید
