แบ่งตารางออกเป็นรายการของตารางย่อย (List of Tables) โดยใช้ hash function กำหนดการกระจายข้อมูล
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| table | table | ตารางที่ต้องการแบ่ง |
| column | text | ชื่อคอลัมน์ที่ใช้เป็นตัวกำหนด partition (ค่าของคอลัมน์นี้จะผ่านฟังก์ชัน hash) |
| groups | number | จำนวนกลุ่ม (partition) ที่ต้องการ – ต้องเป็นจำนวนเต็มบวก |
| hash | function | ฟังก์ชันสำหรับคำนวณค่า hash ปกติใช้ each _ (แทนค่าในคอลัมน์) หรือ each Text.Hash(_) สำหรับแฮชข้อความ |
ฟังก์ชัน Table.Partition ใช้สำหรับแบ่งตารางออกเป็นกลุ่มเล็กๆ (partitions) โดยคำนวณค่า hash จากคอลัมน์ที่กำหนด แล้วใช้ modulo เพื่อแบ่งแยกแถว ผลลัพธ์คือรายการของตารางย่อยหลายตาราง เหมาะสำหรับการกระจายข้อมูลขนาดใหญ่เพื่อประมวลผลแยกกัน หรือเตรียมข้อมูลสำหรับการประมวลผลแบบขนาน
เจ๋งเรื่องของ Table.Partition คือมันช่วยให้เราแบ่งข้อมูลขนาดใหญ่ได้อย่างชาญฉลาด โดยไม่ต้องเขียน loop หรือ filter ยุ่งๆ หากเรามีข้อมูลนับล้านแถวที่ต้องประมวลผลแยกหลายๆ เฟส Table.Partition จะจัดแบ่งให้เรียบร้อยตามค่า hash ซึ่งการกระจายจะค่อนข้างเท่าๆ กัน
ส่วนตัวผม Table.Partition มักใช้เวลาจัดเตรียมข้อมูลก่อนส่งไปยัง ETL ขั้นต่อไป หรือพอมีข้อมูลขนาดใหญ่ต้องประมวลผลทีละ batch ทีละกลุ่ม ผมจะใช้ Table.Partition มาแบ่งเป็นหลายๆ ตารางโดยอ้างอิงจากคอลัมน์สำคัญ 😎
แบ่งงานประมวลผล (Parallel Processing)
กระจายข้อมูลลงถัง (Bucketing)
เตรียมข้อมูลสำหรับการ Load เข้า Partitioned Table ใน Database
แบ่งข้อมูล ID 1-6 เป็น 2 ตารางย่อย: ID คี่ (1,3,5) ไปกลุ่มเดียว, ID คู่ (2,4,6) ไปกลุ่มอื่น โดยใช้ modulo 2 จากค่า ID
แปลงตัวอักษรแรกเป็นรหัส ASCII (A=65) แล้วใช้ modulo 2 แบ่งเป็น 2 กลุ่ม ตัวอักษรที่เป็นคู่กับตัวอักษรที่เป็นคี่ (ตามรหัส ASCII)
แบ่งข้อมูล 1000 แถวออกเป็น 5 batch เพื่อประมวลผลแยกกัน ค่า ID ที่ modulo 5 = 0 ไปกลุ่มแรก, modulo 5 = 1 ไปกลุ่มที่สอง เป็นต้น
ใช้ Text.Hash เพื่อสร้างค่า hash ที่สม่ำเสมอ จากข้อความ Email แล้วแบ่งเป็น 3 กลุ่ม การใช้ Text.Hash ให้การกระจายที่ดีกว่า especially สำหรับข้อมูลข้อความ
ไม่จำเป็น ผลการแบ่งขึ้นอยู่กับค่า hash ของข้อมูล ถ้าข้อมูลกระจายตัวดี ผลจะค่อนข้างเท่าๆ กัน แต่ถ้าข้อมูลเบ่งเบนไปทางค่าใดค่าหนึ่ง บางตารางอาจจะมีแถวมากกว่า
Table.Split แบ่งตามจำนวนแถว (เช่น ทุก 100 แถว) ส่วน Table.Partition แบ่งตามค่า hash ของคอลัมน์ที่กำหนด ใช้ได้กับข้อมูลที่ต้องกระจายแบบสม่ำเสมอ
สำหรับตัวเลข: each _ | สำหรับข้อความ: each Text.Hash(_) | สำหรับวันที่: each [Date.DayOfYear(_) * 1000] | ระบุ function ที่คืนค่าตัวเลขได้
จะได้รายการที่มี 1 ตารางเท่านั้น (ตารางต้นฉบับเหมือนเดิม) ไม่เหมาะที่จะ partition
ฟังก์ชันที่ผู้เขียนโยงไว้กับ Table.Partition จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
Table.ReplacePartitionKey แทนที่ partition key ของตาราง ซึ่งเป็น metadata สำหรับการแบ่งพาร์ทิชันและการจัดการข้อมูลภายใน เอาไว้ควบคุมวิธีการแบ่งพาร์ทิชันของข้อมูลในตารางนั้น
แบ่งตารางออกเป็นรายการของตารางย่อยตามจำนวนแถวที่กำหนด เหมาะสำหรับ Pagination และ Batch Processing
List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่