หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
การแบ่งพาร์ติชันสไตล์ไฮฟ์แบ่งตารางเดลต้าออกเป็นไดเร็กทอรีย่อยทางกายภาพตามค่าของคอลัมน์พาร์ติชันอย่างน้อยหนึ่งคอลัมน์ การรวมค่าคอลัมน์พาร์ติชันที่ไม่ซ้ํากันแต่ละชุดจะสร้างไดเร็กทอรีแยกต่างหาก เลย์เอาต์นี้เปิดใช้งานการตัดแต่งกิ่งพาร์ติชัน: กลไกจัดการข้ามไดเร็กทอรีทั้งหมดเมื่อการสืบค้นกรองในคอลัมน์พาร์ติชัน
เคล็ดลับ
สําหรับปริมาณงานส่วนใหญ่ที่เริ่มต้นใน 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 บดอัด |