Merging and splitting data#
ในบทนี้ คุณจะได้เรียนรู้วิธีการรวม (merge) และแบ่ง (split) ข้อมูล และในกรณีใดบ้างที่อาจเป็นประโยชน์ในการดำเนินการเหล่านี้
Merging data#
ในบางกรณี คุณอาจต้องรวม (combine) และประมวลผลข้อมูลจากแหล่งต่างๆ
การรวมข้อมูลอาจเกี่ยวข้องกับ:
- การสร้าง data set หนึ่งชุดจากหลายแหล่ง
- การซิงโครไนซ์ข้อมูลระหว่างหลายระบบ ซึ่งอาจรวมถึงการลบข้อมูลที่ซ้ำซ้อน หรือการอัปเดตข้อมูลในระบบหนึ่งเมื่อมีการเปลี่ยนแปลงในอีกระบบหนึ่ง
One-way vs. two-way sync
ในการซิงค์แบบ one-way ข้อมูลจะถูกซิงโครไนซ์ในทิศทางเดียว ระบบหนึ่งทำหน้าที่เป็น single source of truth เมื่อข้อมูลในระบบหลักนั้นเปลี่ยนแปลง มันจะเปลี่ยนแปลงในระบบรองโดยอัตโนมัติ แต่ถ้าข้อมูลในระบบรองเปลี่ยนแปลง การเปลี่ยนแปลงนั้นจะไม่สะท้อนในระบบหลัก
ในการซิงค์แบบ two-way ข้อมูลจะถูกซิงโครไนซ์ทั้งสองทิศทาง (ระหว่างทั้งสองระบบ) เมื่อข้อมูลในระบบใดระบบหนึ่งเปลี่ยนแปลง มันจะเปลี่ยนแปลงในอีกระบบหนึ่งโดยอัตโนมัติเช่นกัน
This blog tutorial อธิบายวิธีการซิงค์ข้อมูลแบบ one-way และ two-way ระหว่าง CRM สองระบบ
ใน n8n คุณสามารถรวมข้อมูลจากสอง nodes ที่แตกต่างกันโดยใช้ Merge node ซึ่งมีตัวเลือกการรวมหลายแบบ:
- Append
- Combine
- Merge by Fields: ต้องการ input fields ที่จะใช้จับคู่
- Merge by Position
- Combine all possible combinations
- Choose Branch
สังเกตว่า Combine > Merge by Fields ต้องการให้คุณป้อน input fields เพื่อใช้จับคู่ fields เหล่านี้ควรมีค่าที่เหมือนกันระหว่าง data sources เพื่อให้ n8n สามารถจับคู่ข้อมูลได้อย่างถูกต้อง ใน Merge node จะเรียกว่า Input 1 Field
และ Input 2 Field

Property Input in dot notation
หากคุณต้องการอ้างอิงค่าที่ซ้อนกัน (nested values) ใน parameters Input 1 Field
และ Input 2 Field
ของ Merge node คุณต้องป้อน property key ในรูปแบบ dot-notation (เป็น text ไม่ใช่ expression)
Note
คุณยังสามารถค้นหา Merge node ได้ภายใต้ชื่อ alias ว่า Join ซึ่งอาจจะเข้าใจง่ายกว่าหากคุณคุ้นเคยกับ SQL joins
Merge Exercise#
สร้าง workflow ที่รวมข้อมูลจาก Customer Datastore node และ Code node
- เพิ่ม Merge node ที่รับ
Input 1
จาก Customer Datastore node และInput 2
จาก Code node - ใน Customer Datastore node ให้รัน operation Get All People
- ใน Code node ให้สร้าง array ของสอง objects ที่มีสาม properties:
name
,language
, และcountry
โดยที่ propertycountry
มีสอง sub-properties คือcode
และname
- กรอกค่าของ properties เหล่านี้ด้วยข้อมูลของตัวละครสองตัวจาก Customer Database
- ตัวอย่างเช่น ภาษาของ Jay Gatsby คือ English และชื่อประเทศคือ United States
- ใน Merge node ให้ลองใช้ merge options ต่างๆ
Show me the solution
workflow สำหรับแบบฝึกหัดนี้มีลักษณะดังนี้:
หากคุณรวมข้อมูลด้วย option Keep Matches โดยใช้ name เป็น input fields เพื่อจับคู่ ผลลัพธ์ควรมีลักษณะดังนี้ (โปรดทราบว่าตัวอย่างนี้มีเพียง Jay Gatsby; ของคุณอาจดูแตกต่างกันไปขึ้นอยู่กับตัวละครที่คุณเลือก):
หากต้องการตรวจสอบการกำหนดค่าของ nodes คุณสามารถคัดลอกโค้ด JSON workflow ด้านล่างและวางลงใน Editor UI ของคุณ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|
Looping#
ในบางกรณี คุณอาจต้องดำเนินการเดียวกันกับแต่ละ element ของ array หรือแต่ละ data item (เช่น การส่งข้อความไปยังทุก contact ใน address book ของคุณ) ในทางเทคนิค คุณต้อง iterate ผ่านข้อมูล (ด้วย loops)
โดยทั่วไป n8n จะจัดการกับการประมวลผลซ้ำๆ นี้โดยอัตโนมัติ เนื่องจาก nodes จะทำงานหนึ่งครั้งสำหรับแต่ละ item ดังนั้นคุณไม่จำเป็นต้องสร้าง loops ใน workflows ของคุณ
อย่างไรก็ตาม มี exceptions ของ nodes และ operations บางอย่างที่จะต้องให้คุณสร้าง loop ใน workflow ของคุณ
ในการ create a loop in an n8n workflow คุณต้องเชื่อมต่อ output ของ node หนึ่งไปยัง input ของ node ก่อนหน้า และเพิ่ม If node เพื่อตรวจสอบว่าจะหยุด loop เมื่อใด
Splitting data in batches#
หากคุณต้องการประมวลผลข้อมูลขาเข้าจำนวนมาก, execute Code node หลายครั้ง, หรือหลีกเลี่ยง API rate limits วิธีที่ดีที่สุดคือการแบ่งข้อมูลออกเป็น batches (กลุ่ม) และประมวลผล batches เหล่านี้
สำหรับกระบวนการเหล่านี้ ให้ใช้ Loop Over Items node node นี้จะแบ่งข้อมูล input ออกเป็น batch size ที่ระบุ และในแต่ละ iteration จะคืนค่าข้อมูลตามจำนวนที่กำหนดไว้ล่วงหน้า
Execution of Loop Over Items node
Loop Over Items node จะหยุด executing หลังจากที่ items ขาเข้าทั้งหมดถูกแบ่งออกเป็น batches และส่งต่อไปยัง node ถัดไปใน workflow ดังนั้นจึงไม่จำเป็นต้องเพิ่ม If node เพื่อหยุด loop
Loop/Batch Exercise#
สร้าง workflow ที่อ่าน RSS feed จาก Medium และ dev.to workflow ควรประกอบด้วยสาม nodes:
- Code node ที่คืนค่า URLs ของ RSS feeds ของ Medium (
https://medium.com/feed/n8n-io
) และ dev.to (https://dev.to/feed/n8n
) - Loop Over Items node ที่มี
Batch Size: 1
ซึ่งรับ inputs จาก Code node และ RSS Read node และ iterates เหนือ items - RSS Read node ที่รับ URL ของ Medium RSS feed ซึ่งส่งผ่านเป็น expression:
{{ $json.url }}
- RSS Read node เป็นหนึ่งใน exception nodes ซึ่งประมวลผลเฉพาะ item แรกที่ได้รับ ดังนั้น Loop Over Items node จึงจำเป็นสำหรับการ iterating เหนือ multiple items
Show me the solution
- เพิ่ม Code Node คุณสามารถจัดรูปแบบโค้ดได้หลายวิธี วิธีหนึ่งคือ:
- ตั้งค่า Mode เป็น
Run Once for All Items
- ตั้งค่า Language เป็น
JavaScript
- คัดลอกโค้ดด้านล่างและวางลงใน JavaScript Code editor:
1 2 3 4 5 6 7 8 9 10 11 12 13
let urls = [ { json: { url: 'https://medium.com/feed/n8n-io' } }, { json: { url: 'https://dev.to/feed/n8n' } } ] return urls;
- ตั้งค่า Mode เป็น
- เพิ่ม Loop Over Items node ที่เชื่อมต่อกับ Code node
- ตั้งค่า Batch Size เป็น
1
- ตั้งค่า Batch Size เป็น
- Loop Over Items node จะเพิ่ม node ที่ชื่อ "Replace Me" โดยอัตโนมัติ ให้แทนที่ node นั้นด้วย RSS Read node
- ตั้งค่า URL ให้ใช้ url จาก Code Node:
{{ $json.url }}
- ตั้งค่า URL ให้ใช้ url จาก Code Node:
workflow สำหรับแบบฝึกหัดนี้มีลักษณะดังนี้:
หากต้องการตรวจสอบการกำหนดค่าของ nodes คุณสามารถคัดลอกโค้ด JSON workflow ด้านล่างและวางลงใน Editor UI ของคุณ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
|