แชร์ผ่าน


การกระชับโต๊ะเดลต้า

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

วิธีการบดอัด

Microsoft Fabric มีหลายวิธีในการรักษาขนาดไฟล์ที่เหมาะสมที่สุดในตารางเดลต้า:

OPTIMIZE สั่ง

คําสั่งนี้เป็น OPTIMIZE การดําเนินการพื้นฐานในการกระชับตารางเดลต้า มันเขียนไฟล์ขนาดเล็กใหม่เป็นไฟล์ขนาดใหญ่เพื่อปรับปรุงเค้าโครงข้อมูลในตารางเดลต้า

OPTIMIZE dbo.table_name
ทรัพย์สิน คำอธิบาย ค่าพื้นฐาน การกําหนดค่าเซสชัน
ขนาดไฟล์ขั้นต่ํา ไฟล์ที่มีขนาดเล็กกว่าเกณฑ์นี้จะถูกจัดกลุ่มเข้าด้วยกันและเขียนใหม่เป็นไฟล์ขนาดใหญ่ 1073741824 (1 ก.) spark.databricks.delta.optimize.min ขนาดไฟล์
max ขนาดไฟล์ ขนาดไฟล์เป้าหมายที่สร้างโดย OPTIMIZE คําสั่ง 1073741824 (1 กรัม) spark.databricks.delta.optimize.max ขนาดไฟล์

สําคัญ

ในขณะที่ OPTIMIZE เป็นการดําเนินการ idempotent (หมายความว่าการเรียกใช้สองครั้งติดต่อกันจะไม่เขียนข้อมูลใหม่) การใช้ a minFileSize ที่ใหญ่เกินไปเมื่อเทียบกับขนาดตารางเดลต้าอาจทําให้เกิดการขยายการเขียน ตัวอย่างเช่น ถ้าคุณ minFileSize ถูกตั้งค่าเป็น 1 GB และคุณมีแฟ้ม 900 MB ในตารางของคุณ แฟ้ม 900 MB ที่มีขนาดสมเหตุสมผลจะถูกเขียนใหม่เมื่อ OPTIMIZE เรียกใช้หลังจากเขียนแฟ้มขนาดเล็ก 1 KB ลงในตารางของคุณ สําหรับคําแนะนําเกี่ยวกับวิธีจัดการขนาดไฟล์โดยอัตโนมัติ โปรดดู เอกสารประกอบขนาดไฟล์เป้าหมายที่ปรับเปลี่ยนได้

OPTIMIZE ด้วย Z-Order

เมื่อ ZORDER BY ระบุส่วนคําสั่ง ให้ OPTIMIZE เขียนไฟล์ที่ใช้งานอยู่ทั้งหมดใหม่เพื่อให้แถวที่มีค่าคล้ายกันสําหรับคอลัมน์ลําดับ z อยู่ในไฟล์เดียวกัน ซึ่งช่วยปรับปรุงประสิทธิภาพของการข้ามไฟล์สําหรับแบบสอบถามที่กรองในคอลัมน์เหล่านั้น ใช้ Z-Order เมื่อ:

  • คิวรีของคุณมักจะกรองคอลัมน์ตั้งแต่สองคอลัมน์ขึ้นไปพร้อมกัน (เช่น วันที่ + customer_id) และ
  • เพรดิเคตเหล่านั้นได้รับการคัดเลือกมากพอที่การข้ามระดับไฟล์จะลดจํานวนไฟล์ที่สแกน
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE ด้วย V-Order

ส่วนคําสั่งส่งผลให้ VORDER ไฟล์ที่มีขอบเขตสําหรับการบดอัดมีการใช้การเพิ่มประสิทธิภาพ V-Order สําหรับข้อมูลเพิ่มเติมเกี่ยวกับ V-Order โปรดดู เอกสารโดยละเอียด

OPTIMIZE dbo.table_name VORDER

OPTIMIZE ด้วยการจัดกลุ่มของเหลว

การจัดกลุ่มของเหลวถูกระบุเป็นตัวเลือกตาราง ดู เปิดใช้งานการจัดกลุ่ม Liquid สําหรับรายละเอียด เมื่อเปิดใช้งานการจัดกลุ่ม Liquid ให้ OPTIMIZE ทําการเขียนใหม่ทางกายภาพที่ใช้นโยบายการจัดกลุ่ม

สําคัญ

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

เพิ่มประสิทธิภาพอย่างรวดเร็ว

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

แทนที่จะกระชับไฟล์อย่างสุ่มสี่สุ่มสี่สุ่มห้าเมื่อใดก็ตามที่มีไฟล์ขนาดเล็ก Fast Optimize จะประเมินว่าแต่ละถังผู้สมัคร (กลุ่มไฟล์ขนาดเล็ก) ตรงตามเป้าหมายการบีบอัดแนวทางปฏิบัติที่ดีที่สุดที่กําหนดค่าได้หรือไม่ Fast Optimize จะเรียกใช้การบีบอัดในถังขยะของไฟล์ก็ต่อเมื่อการรวมไฟล์มีแนวโน้มที่จะถึงขนาดเป้าหมายขั้นต่ําของคุณ หรือหากมีไฟล์ขนาดเล็กมากเกินไป มิฉะนั้น จะข้ามกลุ่มนั้นหรือลดจํานวนแฟ้มที่กระชับ

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

การปรับให้เหมาะสมอย่างรวดเร็วสามารถปรับแต่งได้ตามความคาดหวังในการบดอัดของคุณ:

ทรัพย์สิน คำอธิบาย ค่าพื้นฐาน การกําหนดค่าเซสชัน
ไฟล์ minNum จํานวนไฟล์ขนาดเล็กที่ต้องมีอยู่ในถังขยะเพื่อปรับให้เหมาะสมหากถังขยะมีข้อมูลไม่เพียงพอที่ประมาณการเพื่อสร้างไฟล์ที่กระชับ 50 spark.microsoft.delta.optimize.fast.minNumFiles
ปาร์เก้ค่าสัมประสิทธิ์ คูณด้วยขนาดไฟล์ต่ําสุดของบริบทที่ปรับให้เหมาะสมเพื่อกําหนดจํานวนขั้นต่ําของข้อมูลไฟล์ขนาดเล็กที่ต้องมีอยู่ในช่องเก็บข้อมูลสําหรับช่องเก็บที่จะรวมอยู่ในขอบเขตของการบดอัด 1.3 spark.microsoft.delta.optimize.fast.parquet ค่าสัมประสิทธิ์

Note

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

วิธีการทำงาน

การเพิ่มประสิทธิภาพอย่างรวดเร็วจะแนะนําการตรวจสอบเพิ่มเติมก่อนที่ถังขยะจะถูกบดอัด สําหรับถังผู้สมัครแต่ละช่อง Fast Optimize จะประเมิน:

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

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

สกรีนช็อตแสดงให้เห็นว่าการเพิ่มประสิทธิภาพจะประเมินว่าถังขยะถูกกระชับหรือไม่

Note

การใช้งานที่แน่นอนอาจมีการพัฒนาเมื่อเวลาผ่านไป

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

สกรีนช็อตแสดงให้เห็นว่าการเพิ่มประสิทธิภาพส่งผลให้การเขียนข้อมูลใหม่น้อยลงเมื่อเวลาผ่านไป

Note

เพื่อจุดประสงค์ในการอธิบายเท่านั้นไดอะแกรมข้างต้นถือว่าขนาดของไฟล์ที่เขียนจากการบดอัดคือผลรวมของขนาดของไฟล์ขนาดเล็ก นอกจากนี้ยังหมายถึง a parquetCoefficient ของ 1

Limitations
  • ไม่สามารถใช้ได้กับการจัดกลุ่มของเหลวและการดําเนินการ Z-Order
  • การเพิ่มประสิทธิภาพอย่างรวดเร็วจะไม่ปรับเปลี่ยนลักษณะการทํางานของการบดอัดอัตโนมัติ

เป้าหมายการบีบอัดระดับไฟล์

เพื่อหลีกเลี่ยงการเขียนใหม่ของข้อมูลที่ก่อนหน้านี้ถือว่าถูกกระชับ (ใหญ่พอ) ตามการเปลี่ยนแปลงเป้าหมาย spark.microsoft.delta.optimize.fileLevelTarget.enabled ขนาดไฟล์ต่ําสุดและสูงสุดของการบดอัด สามารถเปิดใช้งานเพื่อป้องกันการกระชับใหม่ของไฟล์ที่กระชับไว้แล้ว เมื่อเปิดใช้งาน ไฟล์จะไม่ถูกกระชับใหม่หากก่อนหน้านี้มีขนาดไฟล์เป้าหมายอย่างน้อยครึ่งหนึ่ง ณ เวลาที่ทําการบีบอัด การรักษาเป้าหมายระดับไฟล์จะช่วยลดการขยายการเขียนเนื่องจากขนาดเป้าหมายการบดอัดเปลี่ยนแปลงไปตามกาลเวลา (ตัวอย่างเช่น จากการประเมินขนาดไฟล์เป้าหมายที่ปรับเปลี่ยนได้และกําหนดเป้าหมายที่ใหญ่ขึ้น) ถ้าเปิดใช้งาน แท็กจะถูก OPTIMIZE_TARGET_SIZE เพิ่มลงในแฟ้มใหม่เมื่อเรียกใช้ OPTIMIZE หรือสําหรับการดําเนินการเขียนใดๆ ถ้า delta.targetFileSize มีคุณสมบัติ หรือ delta.targetFileSize.adaptive ตาราง ถูกตั้งค่า

Note

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

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

การบดอัดอัตโนมัติ

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

ตั้งค่าที่ระดับเซสชันเพื่อเปิดใช้งานการบดอัดอัตโนมัติบนตารางใหม่:

SET spark.databricks.delta.autoCompact.enabled = TRUE

ตั้งค่าที่ระดับตารางให้เปิดใช้งานสําหรับตารางที่เลือกเท่านั้น:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

ใช้ตัวเลือก DataFrameWriter เพื่อเปิดใช้งานบนตารางใหม่:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

เปิดใช้งานบนตารางที่มีอยู่:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

ลักษณะการทํางานของการบดอัดอัตโนมัติสามารถปรับได้ผ่านการกําหนดค่าเซสชัน Spark ต่อไปนี้:

ทรัพย์สิน คำอธิบาย ค่าพื้นฐาน การกําหนดค่าเซสชัน
max ขนาดไฟล์ ขนาดไฟล์สูงสุดเป้าหมายเป็นไบต์สําหรับไฟล์ที่กระชับ 134217728b (128 เมกะไบต์) spark.databricks.delta.autoCompact.max ขนาดไฟล์
ขนาดไฟล์ขั้นต่ํา ขนาดไฟล์ต่ําสุดเป็นไบต์สําหรับไฟล์ที่จะถือว่ากระชับ สิ่งใดก็ตามที่ต่ํากว่าเกณฑ์นี้ถือเป็นการบดอัดและนับรวมใน minNumFiles เกณฑ์ ยกเลิกการตั้งค่า ตามค่าเริ่มต้น คํานวณเป็น 1/2 ของค่า maxFileSize เว้นแต่คุณจะตั้งค่าไว้อย่างชัดเจน spark.databricks.delta.autoCompact.min ขนาดไฟล์
ไฟล์ minNum จํานวนไฟล์ขั้นต่ําที่ต้องมีอยู่ภายใต้ minFileSize เกณฑ์สําหรับการบีบอัดอัตโนมัติที่จะทริกเกอร์ 50 spark.databricks.delta.autoCompact.minNumFiles

Note

Microsoft แนะนําให้ใช้ การบดอัดอัตโนมัติ แทนการจัด OPTIMIZE กําหนดการงาน โดยทั่วไปการบดอัดอัตโนมัติจะมีประสิทธิภาพดีกว่างานการบดอัดตามกําหนดการที่เพิ่มประสิทธิภาพการอ่าน/เขียนสูงสุด และมักจะขจัดค่าใช้จ่ายในการบํารุงรักษาของการเข้ารหัส การจัดกําหนดการ และการปรับความถี่ของการเรียกใช้งานตามกําหนดการให้เหมาะสม แนะนําให้ใช้การบดอัดอัตโนมัติเมื่อวัตถุประสงค์ระดับบริการการประมวลผลข้อมูลทนต่อเวลาแฝงที่เพิ่มขึ้นจากการบดอัดอัตโนมัติที่ทริกเกอร์เมื่อจําเป็นต้องมีการบดอัด หากข้อกําหนดเวลาแฝงของข้อมูลเข้มงวด อาจมีประสิทธิภาพมากกว่าในการจัดกําหนดการเพิ่มประสิทธิภาพให้ทํางานบนพูล Spark แยกต่างหาก เพื่อไม่ให้การดําเนินการเขียนเห็นการเพิ่มขึ้นเป็นระยะเนื่องจากการดําเนินการบดอัดแบบซิงโครนัสถูกทริกเกอร์

สําคัญ

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

การบํารุงรักษาโต๊ะเลคเฮ้าส์

ผู้ใช้สามารถเรียกใช้การดําเนินการบํารุงรักษาเฉพาะกิจ เช่น OPTIMIZE จาก Lakehouse UI สําหรับข้อมูลเพิ่มเติม โปรดดู การบํารุงรักษาโต๊ะเลคเฮาส์

สรุปแนวทางปฏิบัติที่ดีที่สุด

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