การแบ่งพาร์ติชันสําหรับตารางเดลต้า

การแบ่งพาร์ติชันสไตล์ไฮฟ์แบ่งตารางเดลต้าออกเป็นไดเร็กทอรีย่อยทางกายภาพตามค่าของคอลัมน์พาร์ติชันอย่างน้อยหนึ่งคอลัมน์ การรวมค่าคอลัมน์พาร์ติชันที่ไม่ซ้ํากันแต่ละชุดจะสร้างไดเร็กทอรีแยกต่างหาก เลย์เอาต์นี้เปิดใช้งานการตัดแต่งกิ่งพาร์ติชัน: กลไกจัดการข้ามไดเร็กทอรีทั้งหมดเมื่อการสืบค้นกรองในคอลัมน์พาร์ติชัน

เคล็ดลับ

สําหรับปริมาณงานส่วนใหญ่ที่เริ่มต้นใน Fabric Runtime 2.0 การจัดกลุ่ม liquid เป็นกลยุทธ์เค้าโครงข้อมูลที่แนะนํา สําหรับประสิทธิภาพการอ่าน เหตุผลหลักในการใช้การแบ่งพาร์ติชันคือการ เปิดใช้งานการดําเนินการเขียนพร้อมกันที่ไม่ขัดแย้งกัน

สําหรับคําแนะนําการจัดกลุ่มของเหลวแบบเต็ม โปรดดู การจัดกลุ่มของเหลว

เมื่อใดควรใช้การแบ่งพาร์ติชัน

กรณีการใช้งานหลักสําหรับการแบ่งพาร์ติชันใน Delta Lake คือการ เปิดใช้งานการดําเนินการเขียนพร้อมกันที่ไม่ขัดแย้งกัน Delta Lake ใช้ การควบคุมการทํางานพร้อมกันในแง่ดี และการดําเนินการสองอย่างที่สัมผัสกับไฟล์เดียวกันอาจขัดแย้งกันได้ การแบ่งพาร์ติชันทําให้การดําเนินการพร้อมกันสามารถกําหนดเป้าหมายชุดไฟล์ที่ไม่ต่อเนื่องได้โดยการทํางานบนพาร์ติชันที่แยกจากกัน

ใช้การแบ่งพาร์ติชันเมื่อ:

  • คุณมี ตัวเขียนพร้อมกัน ที่ต้องอัปเดต ลบ หรือผสานลงในตารางเดียวกันโดยไม่ขัดแย้งกัน เช่น ไปป์ไลน์หลายรายการที่ประมวลผลหน่วยธุรกิจหรือภูมิภาคที่แตกต่างกันพร้อมกัน
  • คอลัมน์พาร์ติชันของคุณมี คาร์ดินาลลิตี้ต่ําถึงปานกลาง (ค่าที่แตกต่างกันหลายสิบถึงหลายร้อยค่า ไม่ใช่หลักพัน) หมายเหตุ: ตารางขนาดใหญ่สามารถรองรับพาร์ติชันได้มากขึ้น กําหนดเป้าหมายข้อมูลอย่างน้อย 1 GB ในแต่ละพาร์ติชัน
  • ค่าพาร์ติชันสอดคล้องกับ รูปแบบการเขียนของคุณ—ผู้เขียนแต่ละคนกําหนดเป้าหมายพาร์ติชันเฉพาะโดยธรรมชาติ

สำคัญ

สําหรับการข้ามไฟล์และประสิทธิภาพการอ่านเพียงอย่างเดียวการจัดกลุ่มของเหลวจะมีประสิทธิภาพมากกว่าการแบ่งพาร์ติชัน การจัดกลุ่ม Liquid ช่วยลดความเสี่ยงของปัญหาไฟล์ขนาดเล็กจากคอลัมน์พาร์ติชันที่มีคาร์ดินาลลิตี้สูง และช่วยให้คุณสามารถเปลี่ยนกลยุทธ์การจัดคลัสเตอร์ตลอดวงจรชีวิตของตารางได้ เลือกการแบ่งพาร์ติชันเป็นหลักเมื่อคุณต้องการแยกผู้เขียนพร้อมกัน

สร้างตารางที่แบ่งพาร์ติชัน

CREATE TABLE sales.orders (
    order_id BIGINT,
    order_date DATE,
    region STRING,
    amount DECIMAL(10,2)
)
USING DELTA
PARTITIONED BY (region)

การแบ่งพาร์ติชันและการเขียนพร้อมกัน

การแบ่งพาร์ติชันเป็นกลไกหลักใน Delta Lake เพื่อหลีกเลี่ยงความขัดแย้งระหว่างการดําเนินการเขียนพร้อมกัน เมื่อแบ่งพาร์ติชันตารางการดําเนินการที่กําหนดเป้าหมายพาร์ติชันที่แตกต่างกันจะทํางานบนชุดไฟล์ที่ไม่ต่อเนื่องกันและไม่ขัดแย้งกัน

ตัวอย่างเช่น การดําเนินการพร้อมกัน MERGE INTO สองรายการบนตารางที่แบ่งพาร์ติชันโดย region ไม่ขัดแย้ง ตราบใดที่แต่ละรายการกําหนดเป้าหมายไปยังภูมิภาคที่แตกต่างกัน โดยมีเงื่อนไขว่าคอลัมน์พาร์ติชันจะรวมอยู่ในเงื่อนไขการผสานอย่าง ชัดเจน :

-- Pipeline A: processes North America only
MERGE INTO sales.orders AS target
USING staged_orders AS source
ON target.order_id = source.order_id
    AND target.region = 'NA'
    AND source.region = 'NA'
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *

หากไม่มีการแบ่งพาร์ติชัน หรือไม่รวมคอลัมน์พาร์ติชันในเงื่อนไขการดําเนินการ การดําเนินการเดียวกันนี้อาจขัดแย้งกันแม้ว่าจะปรับเปลี่ยนแถวต่างๆ อย่างมีเหตุผลก็ตาม คอลัมน์พาร์ติชันต้องปรากฏในเงื่อนไขการผสานเอง ไม่ใช่แค่ในข้อมูลต้นฉบับเท่านั้น หากไม่มี Delta Lake จะไม่สามารถระบุได้ในเวลาตรวจสอบความถูกต้องว่าการดําเนินการทั้งสองสัมผัสกับชุดไฟล์ที่ไม่ต่อเนื่องกัน

สําหรับคู่มือฉบับสมบูรณ์เกี่ยวกับชนิดข้อขัดแย้งและกลยุทธ์การแก้ไข โปรดดู การควบคุมการทํางานพร้อมกัน

หลุมพรางทั่วไป

  • คอลัมน์พาร์ติชันคาร์ดินาลลิตี้สูง (ตัวอย่างเช่น user_id มีค่าหลายล้านค่า) จะสร้างไดเร็กทอรีและไฟล์ขนาดเล็กหลายพันรายการ ซึ่งทําให้ประสิทธิภาพการเขียนและการอ่านลดลง
    • ควรเลือกคอลัมน์วันที่ด้วยความระมัดระวัง สําหรับหลายตารางการแบ่งพาร์ติชันตามคอลัมน์วันที่ส่งผลให้พาร์ติชันขนาดเล็กมากเกินไป กําหนดเป้าหมายข้อมูลอย่างน้อย 1 GB ในแต่ละพาร์ติชัน
  • ไม่สามารถเปลี่ยนแปลงคอลัมน์พาร์ติชัน ได้หลังจากสร้างตารางโดยไม่ต้องเขียนใหม่ทั้งตาราง
  • ปัญหาไฟล์ขนาดเล็ก เป็นเรื่องปกติในการสตรีมหรือผนวกบ่อยครั้งลงในหลายพาร์ติชัน เนื่องจากการเขียนแต่ละครั้งจะสร้างไฟล์อย่างน้อยหนึ่งไฟล์ต่อพาร์ติชัน
  • การแบ่งพาร์ติชันและการจัดกลุ่มของเหลวเข้ากันไม่ได้บนตารางเดียวกัน คุณต้องเลือกกลยุทธ์เดียว

เปรียบเทียบการแบ่งพาร์ติชันและการจัดกลุ่มของเหลว

แอสเพ็กต์ การแบ่งพาร์ติชันแบบรัง การจัดกลุ่มของเหลว
เหมาะสําหรับ การแยกนักเขียนพร้อมกัน การข้ามไฟล์เอนกประสงค์และการเพิ่มประสิทธิภาพการอ่าน
ความละเอียด หนึ่งไดเรกทอรีต่อค่าที่แตกต่างกัน (หรือชุดค่าผสม) ช่วงค่าระดับไฟล์ ไม่มีไดเร็กทอรี
คาร์ดินาลลิตี้สูง สร้างไฟล์/ไดเร็กทอรีขนาดเล็กหลายพันไฟล์ จัดการอย่างเป็นธรรมชาติ เก็บข้อมูลลงในไฟล์ที่มีขนาดเหมาะสม
การเปลี่ยนแปลงคอลัมน์ ต้องเขียนตารางใหม่ทั้งหมด ALTER TABLE CLUSTER BY นําไปใช้ในถัดไป OPTIMIZE
เขียนเส้นทาง ต้องรู้จักคอลัมน์พาร์ติชันในเวลาเขียน คอลัมน์ใด ๆ สามารถจัดกลุ่มได้หลังจากข้อเท็จจริง
การเขียนพร้อมกัน พาร์ติชันที่ไม่ต่อเนื่องหลีกเลี่ยงความขัดแย้ง ผนวกเท่านั้นโดยไม่มีข้อขัดแย้ง การอัปเดต/ลบ/ผสานอาจขัดแย้งกันบนตารางที่ไม่ได้แบ่งพาร์ติชัน
ปัญหาไฟล์ขนาดเล็ก พบได้บ่อยกับการสตรีมหรือการแทรกบ่อยครั้ง จัดการดูแลโดยการ OPTIMIZE บดอัด