จัดระเบียบตารางเดลต้าใหม่ด้วย REORG

ใช้ REORG คําสั่งเมื่อคุณต้องการเขียนส่วนหนึ่งของตารางเดลต้าใหม่สําหรับเป้าหมายการบํารุงรักษาเฉพาะ ใน Fabric REORG จะจัดระเบียบเค้าโครงทางกายภาพของตารางใหม่โดยการเขียนไฟล์ข้อมูลใหม่หรืออัปเดตข้อมูลเมตาของตาราง โดยขึ้นอยู่กับตัวเลือกที่คุณเลือก

REORG แตกต่างจากการบีบอัดไฟล์ตามปกติ กําหนดเป้าหมายสถานการณ์ต่างๆ เช่น การลบแถวที่เวกเตอร์การลบทําเครื่องหมายว่าถูกลบ

REORG ทําอะไร

REORG TABLE เขียนสถานะตารางใหม่สําหรับการดําเนินการบํารุงรักษาที่กําหนดไว้

  • APPLY (PURGE) เขียนไฟล์ข้อมูลที่ได้รับผลกระทบใหม่เพื่อให้แถวที่ถูกลบแบบนุ่มนวลผ่านเวกเตอร์การลบจะถูกลบออกจากไฟล์ Parquet ที่อยู่เบื้องหลัง

ใช้ REORG เมื่อคุณต้องการผลลัพธ์การเขียนใหม่ที่เฉพาะเจาะจง ไม่ใช่แค่ไฟล์ที่เล็กลงหรือน้อยลง

ใช้ PURGE เพื่อลบแถวที่ถูกลบแบบชั่วคราว

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

เมื่อคุณเรียกใช้ REORG TABLE ... APPLY (PURGE) Fabric จะเขียนแฟ้มที่ได้รับผลกระทบใหม่ และเอาแถวที่ถูกลบแบบชั่วคราวออกจากแฟ้ม Parquet ที่ใช้งานอยู่ หลังจาก PURGE เสร็จสิ้นแถวที่ถูกลบเหล่านั้นจะหายไปจากไฟล์ที่เขียนใหม่

Note

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

ตัวเลือกนี้มีประโยชน์เมื่อ:

ลบข้อมูลที่ถูกลบอย่างถาวร

คําสั่งนี้จะ REORG TABLE ... APPLY (PURGE) เขียนไฟล์ข้อมูลที่ใช้งานอยู่ใหม่ แต่ไฟล์ที่ถูกแทนที่จะยังคงอยู่ใน OneLake เป็นไฟล์ที่ไม่ได้อ้างอิงจนกว่า VACUUM จะลบไฟล์เหล่านั้นออก เนื่องจากผู้ใช้ยังสามารถใช้การเดินทาง ข้ามเวลา หรือ กู้คืน เพื่อเข้าถึงระเบียนที่ถูกลบได้ หากต้องการลบข้อมูลที่ถูกลบอย่างถาวร ให้รัน VACUUM หลังจาก PURGE.

โดยค่าเริ่มต้น VACUUM จะเก็บไฟล์ที่ไม่ได้อ้างอิงไว้เป็นเวลาเจ็ดวัน หากคุณต้องการลบไฟล์ทันที ให้ปิดการตรวจสอบความปลอดภัยระยะเวลาการเก็บรักษาชั่วคราวสําหรับเซสชัน Spark ปัจจุบัน รัน VACUUM ด้วยการเก็บรักษาเป็นศูนย์ชั่วโมง แล้วเปิดใช้งานการตรวจสอบความปลอดภัยอีกครั้ง

Warning

การเก็บรักษาแบบ zero-hour จะลบไฟล์ที่ไม่ได้อ้างอิงทั้งหมดทันที มันสามารถรบกวนผู้อ่านหรือผู้เขียนที่ทํางานพร้อมกันและป้องกันการย้อนเวลาไปยังเวอร์ชันตารางที่พึ่งพาไฟล์เหล่านั้น ยืนยันว่าไม่มีการดําเนินการพร้อมกันใดที่ใช้ตารางนี้ก่อนดําเนินการต่อ

รันคําสั่งตามลําดับนี้:

REORG TABLE schema_name.table_name APPLY (PURGE);

SET spark.databricks.delta.retentionDurationCheck.enabled = false;
VACUUM schema_name.table_name RETAIN 0 HOURS;
SET spark.databricks.delta.retentionDurationCheck.enabled = true;

การเปลี่ยนแปลงการกําหนดค่าจะใช้ได้เฉพาะกับเซสชัน Spark ปัจจุบันเท่านั้น เปิดใช้งานการตรวจสอบความปลอดภัยอีกครั้งหลังจากทําความสะอาดทันที หากไม่จําเป็นต้องลบทันที ให้เปิดใช้งานการตรวจสอบความปลอดภัยและดําเนินการ VACUUM หลังจากระยะเวลาการเก็บรักษาที่กําหนด

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการเก็บรักษาและผลกระทบต่อการเดินทางข้ามเวลา โปรดดูตาราง VACUUM Delta

ตรวจทานไวยากรณ์

ใช้ตัวอย่างต่อไปนี้ amp ในสมุดบันทึก Fabric

ล้างแถวที่ถูกลบแบบชั่วคราวออกจากตาราง

REORG TABLE table_name APPLY (PURGE)

ล้างแถวที่ถูกลบแบบชั่วคราวสําหรับการจับคู่ข้อมูลเท่านั้น

REORG TABLE table_name WHERE predicate APPLY (PURGE)

ใช้ WHERE ส่วนคําสั่งเมื่อคุณต้องการกําหนดเป้าหมายพาร์ติชันเฉพาะหรือส่วนข้อมูลที่เล็กกว่า

REORG TABLE sales.orders
WHERE order_date = DATE '2026-05-01'
APPLY (PURGE)

เลือก REORG หรือ OPTIMIZE

REORG และ OPTIMIZE แก้ปัญหาต่างๆ

  • OPTIMIZE ทําการบดอัดถังขยะ มันรวมไฟล์ขนาดเล็กเป็นไฟล์ขนาดใหญ่เพื่อปรับปรุงประสิทธิภาพการสแกน
  • REORG ... APPLY (PURGE) ลบแถวที่เวกเตอร์การลบทําเครื่องหมายว่าลบแล้ว

คุณสามารถใช้ทั้งสองคําสั่งร่วมกันได้ ตัวอย่างเช่น คุณอาจเรียกใช้ REORG ... APPLY (PURGE) เพื่อลบข้อมูลที่ถูกลบออก จากนั้นเรียกใช้ OPTIMIZE เพื่อปรับปรุงเค้าโครงแฟ้ม

ทําความเข้าใจเวกเตอร์การลบ

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

REORG ... APPLY (PURGE) เป็นขั้นตอนที่ลบแถวเหล่านั้นออกจากไฟล์ Parquet ที่เขียนใหม่

เรียกใช้ REORG ใน Fabric

เรียกใช้ REORG จากประสบการณ์ที่ใช้ Spark ใน Fabric เช่น:

  • โน้ตบุ๊คผ้า
  • ข้อกําหนดงาน Spark

อย่าเรียกใช้ REORG จากตําแหน่งข้อมูลการวิเคราะห์ SQL REORG เป็นคําสั่งการบํารุงรักษา Spark SQL สําหรับตารางเดลต้า

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

  • เรียกใช้ PURGE เฉพาะเมื่อคุณมีความต้องการเฉพาะ เช่น ข้อกําหนดการปฏิบัติตามข้อกําหนด OPTIMIZEล้างไฟล์โดยอัตโนมัติที่มีการอ้างอิงบันทึกมากกว่า 5% โดยเวกเตอร์การลบ ดังนั้นการบํารุงรักษาตามปกติจึงไม่จําเป็นต้องมีขั้นตอนแยกต่างหากPURGE
  • ปฏิบัติตาม ขั้นตอนการทําความสะอาดความสอดคล้องเมื่อคุณ ต้องการให้ข้อมูลที่ถูกลบถูกลบออกจาก OneLake อย่างถาวร
  • ใช้ WHERE เพรดิเคตเพื่อกําหนดเป้าหมายพาร์ติชันเฉพาะเมื่อคุณไม่จําเป็นต้องเขียนตารางแบบเต็มใหม่
  • ใช้ UPGRADE UNIFORM เมื่อคุณต้องการเครื่องอ่าน Iceberg แต่วางแผนสําหรับข้อมูลเมตาเพิ่มเติมที่ UniForm เก็บรักษาไว้
  • ปฏิบัติ REORG และเป็น OPTIMIZE การดําเนินการบํารุงรักษาเสริม ไม่ใช่การดําเนินการที่เปลี่ยนได้