แชร์ผ่าน


การปรับตาราง Delta Lake ให้เหมาะสมและ V-Order

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

การสั่งซื้อ V คืออะไร

V-Order คือการปรับเวลาการเขียนให้เหมาะสมสําหรับรูปแบบไฟล์ parquet ที่ช่วยให้สามารถอ่านได้อย่างรวดเร็วภายใต้กลไกการคํานวณ Microsoft Fabric เช่น Power BI, SQL, Spark และอื่น ๆ

กลไก Power BI และ SQL ใช้ประโยชน์จากเทคโนโลยี Microsoft Verti-Scan และไฟล์ Parquet แบบ V-Ordered เพื่อให้ได้เวลาในการเข้าถึงข้อมูลในหน่วยความจําเช่น Spark และกลไกการคํานวณที่ไม่ใช่ Verti-Scan อื่น ๆ ยังได้รับประโยชน์จากไฟล์ V-Ordered ด้วยค่าเฉลี่ยของเวลาในการอ่านเร็วขึ้น 10% ด้วยสถานการณ์บางอย่างถึง 50%

V-Order ทํางานโดยใช้การเรียงลําดับพิเศษ การกระจายกลุ่มแถว การเข้ารหัสพจนานุกรมและการบีบอัดบนไฟล์ parquet ดังนั้นจึงต้องใช้เครือข่าย ดิสก์ และทรัพยากร CPU น้อยกว่าในกลไกการคํานวณเพื่ออ่าน ซึ่งมีประสิทธิภาพและประสิทธิภาพด้านต้นทุน การเรียงลําดับแบบ V-Order มีผลกระทบต่อเวลาในการเขียนเฉลี่ย 15% แต่ให้การบีบอัดเพิ่มขึ้นสูงสุดถึง 50%

เป็นไปตามรูปแบบ parquet ของโอเพนซอร์ส 100% กลไกปาร์เกตทั้งหมดสามารถอ่านเป็นไฟล์ปาร์เก้ปกติได้ ตาราง Delta มีประสิทธิภาพมากกว่าที่เคย ฟีเจอร์เช่น ลําดับ Z สามารถเข้ากันได้กับ V-Order คุณสมบัติตารางและคําสั่งการปรับให้เหมาะสมสามารถใช้ได้ในการควบคุม V-Order บนพาร์ติชัน

V-Order ถูกนําไปใช้ในระดับไฟล์ parquet ตาราง Delta และคุณลักษณะของมันเช่น Z-Order, การกระชับ, สูญญากาศ, การเดินทางเวลา ฯลฯ เป็นลําดับเพื่อ V-Order เป็นเช่นนั้นเข้ากันได้และสามารถนํามาใช้ร่วมกันเพื่อประโยชน์เพิ่มเติม

การควบคุมการเขียน V-Order

การสั่งซื้อ V จะ เปิดใช้งานตามค่าเริ่มต้น ใน Microsoft Fabric และใน Apache Spark จะถูกควบคุมโดยการกําหนดค่าต่อไปนี้

การตั้งค่าคอนฟิก ค่าเริ่มต้น คำอธิบาย
spark.sql.parquet.vorder.enabled จริง ควบคุมการเขียน V-Order ระดับเซสชัน
TBLPROPERTIES("delta.parquet.vorder.enabled") เท็จ โหมด V-Order เริ่มต้นบนตาราง
ตัวเลือกตัวเขียน Dataframe: parquet.vorder.enabled ยกเลิกการตั้งค่า ควบคุมการเขียน V-Order โดยใช้ตัวเขียน Dataframe

ใช้คําสั่งต่อไปนี้เพื่อควบคุมการใช้งานการเขียน V-Order

ตรวจสอบการกําหนดค่าคําสั่งซื้อ V ในเซสชัน Apache Spark

%%sql 
SET spark.sql.parquet.vorder.enabled 

ปิดใช้งานการเขียนคําสั่ง V ในเซสชัน Apache Spark

%%sql 
SET spark.sql.parquet.vorder.enabled=FALSE 

เปิดใช้งานการเขียนลําดับ V ในเซสชัน Apache Spark

สำคัญ

เมื่อเปิดใช้งานในระดับเซสชัน การเขียน parquet ทั้งหมดจะดําเนินการด้วยเปิดใช้งาน V-Order ซึ่งรวมถึงตาราง parquet ที่ไม่ใช่ Delta และตาราง Delta ที่มีคุณสมบัติตารางที่parquet.vorder.enabledตั้งค่าเป็น true หรือfalse

%%sql 
SET spark.sql.parquet.vorder.enabled=TRUE 

ควบคุมการสั่งซื้อ V-Order โดยใช้คุณสมบัติตาราง Delta

เปิดใช้งานคุณสมบัติตาราง V-Order ในระหว่างการสร้างตาราง:

%%sql 
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

สำคัญ

เมื่อตั้งค่าคุณสมบัติตารางเป็น true, INSERT, UPDATE และ MERGE คําสั่งจะทํางานตามที่คาดไว้และดําเนินการปรับเวลาการเขียนให้เหมาะสม ถ้าการกําหนดค่าเซสชัน V-Order ถูกตั้งค่าเป็น true หรือ spark.write เปิดใช้งานการเขียนจะเป็น V-Order แม้ว่า TBLPROPERTIES ถูกตั้งค่าเป็น เท็จ

เปิดใช้งานหรือปิดใช้งาน V-Order โดยการเปลี่ยนคุณสมบัติตาราง:

%%sql 
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");

ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");

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

การควบคุม V-Order โดยตรงในการดําเนินการเขียน

คําสั่งการเขียน Apache Spark ทั้งหมดจะสืบทอดการตั้งค่าเซสชันหากไม่ชัดเจน คําสั่งต่อไปนี้ทั้งหมดเขียนโดยใช้ V-Order โดยทางอ้อมเพื่อสืบทอดการกําหนดค่าเซสชัน

df_source.write\
  .format("delta")\
  .mode("append")\
  .saveAsTable("myschema.mytable")

DeltaTable.createOrReplace(spark)\
  .addColumn("id","INT")\
  .addColumn("firstName","STRING")\
  .addColumn("middleName","STRING")\
  .addColumn("lastName","STRING",comment="surname")\
  .addColumn("birthDate","TIMESTAMP")\
  .location("Files/people")\
  .execute()

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
  .saveAsTable("myschema.mytable") 

สำคัญ

การสั่งซื้อ V ใช้กับไฟล์ที่ได้รับผลกระทบจากเพรดิเคตเท่านั้น

ในเซสชันที่ไม่มี spark.sql.parquet.vorder.enabled การตั้งค่าหรือตั้งค่าเป็น false คําสั่งต่อไปนี้จะเขียนโดยใช้ V-Order:

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
  .option("parquet.vorder.enabled ","true")\
  .saveAsTable("myschema.mytable")

DeltaTable.createOrReplace(spark)\
  .addColumn("id","INT")\
  .addColumn("firstName","STRING")\
  .addColumn("middleName","STRING")\
  .addColumn("lastName","STRING",comment="surname")\
  .addColumn("birthDate","TIMESTAMP")\
  .option("parquet.vorder.enabled","true")\
  .location("Files/people")\
  .execute()

ปรับการเขียนให้เหมาะสมคืออะไร

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

ปรับให้เหมาะสม เขียน เป็นคุณลักษณะ Delta Lake บน Microsoft Fabric และ Azure Synapse Analytics ในเครื่องมือ Apache Spark ที่ลดจํานวนไฟล์ที่เขียนและมีจุดมุ่งหมายเพื่อเพิ่มขนาดไฟล์แต่ละรายการของข้อมูลที่เขียน คุณสามารถเปลี่ยนขนาดไฟล์เป้าหมายได้ตามข้อกําหนดของปริมาณงานโดยใช้การกําหนดค่า

คุณลักษณะนี้จะเปิดใช้งานตามค่าเริ่มต้นในรันไทม์ Microsoft Fabric สําหรับ Apache Spark เมื่อต้องการเรียนรู้เพิ่มเติมเกี่ยวกับปรับสถานการณ์การใช้งานการเขียนให้เหมาะสม ให้อ่านบทความ ความจําเป็นในการปรับการเขียนให้เหมาะสมบน Apache Spark

การผสานการปรับให้เหมาะสม

คําสั่ง Delta Lake MERGE ช่วยให้ผู้ใช้สามารถอัปเดตตาราง delta ด้วยเงื่อนไขขั้นสูงได้ ซึ่งสามารถอัปเดตข้อมูลจากตารางต้นทาง มุมมอง หรือ DataFrame ลงในตารางเป้าหมายโดยใช้คําสั่ง MERGE อย่างไรก็ตาม อัลกอริทึมปัจจุบันในการกระจายโอเพนซอร์ส (Open Source)ของ Delta Lake ไม่ได้ปรับให้เหมาะสมสําหรับการจัดการแถวที่ไม่เปลี่ยนแปลง ทีม Microsoft Spark Delta ได้ใช้งานการปรับให้เหมาะสม Low Shuffle Merge แบบกําหนดเอง แถวที่ไม่เปลี่ยนแปลงจะถูกแยกออกจากการดําเนินการสลับราคาแพงที่จําเป็นสําหรับการอัปเดตแถวที่ตรงกัน

การดําเนินการจะถูกควบคุมโดย spark.microsoft.delta.merge.lowShuffle.enabled การกําหนดค่า เปิดใช้งาน โดยค่าเริ่มต้น ในรันไทม์ ไม่จําเป็นต้องมีการเปลี่ยนแปลงรหัสและเข้ากันได้กับการกระจายโอเพนซอร์สของ Delta Lake เมื่อต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสถานการณ์การใช้งาน Low Shuffle Merge ให้อ่านบทความ การปรับให้เหมาะสม Low Shuffle Merge บนตาราง Delta

การบํารุงรักษาตารางเดลต้า

เมื่อมีการเปลี่ยนแปลงตาราง Delta ประสิทธิภาพการทํางานและต้นทุนการจัดเก็บมีแนวโน้มที่จะลดลงด้วยเหตุผลต่อไปนี้:

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

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

คําสั่ง การบํารุงรักษาตาราง OPTIMIZE และ VACUUM สามารถใช้ภายในสมุดบันทึกและ Spark Job Definitions และจากนั้นเรียงลําดับโดยใช้ความสามารถของแพลตฟอร์ม เลคเฮ้าส์ใน Fabric มีฟังก์ชันการทํางานเพื่อใช้ส่วนติดต่อผู้ใช้เพื่อดําเนินการบํารุงรักษาตารางแบบเฉพาะตามที่อธิบายไว้ใน บทความการบํารุงรักษา ตาราง Delta Lake

สำคัญ

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

ควบคุมลําดับ V เมื่อปรับตารางให้เหมาะสม

โครงสร้างคําสั่งต่อไปนี้ขนาดกะทัดรัดของแท่งและเขียนไฟล์ที่ได้รับผลกระทบทั้งหมดใหม่โดยใช้ V-Order ซึ่งเป็นอิสระจากการตั้งค่า TBLPROPERTIES หรือการตั้งค่าการกําหนดค่าเซสชัน:

%%sql 
OPTIMIZE <table|fileOrFolderPath> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER  BY (col_name1, col_name2, ...)] VORDER;

เมื่อใช้งาน ZORDER และ VORDER ร่วมกัน Apache Spark จะดําเนินการ bin-compaction, ZORDER, VORDER ตามลําดับ

คําสั่งต่อไปนี้ประกอบด้วย bin-compact และเขียนไฟล์ที่ได้รับผลกระทบทั้งหมดใหม่โดยใช้การตั้งค่า TBLPROPERTIES ถ้า TBLPROPERTIES ถูกตั้งค่าเป็นจริงเป็น V-Order ไฟล์ที่ได้รับผลกระทบทั้งหมดจะถูกเขียนเป็น V-Order หาก TBLPROPERTIES ไม่ถูกตั้งค่าหรือตั้งค่าเป็น เท็จ เป็น ลําดับ V จะสืบทอดการตั้งค่าเซสชัน ดังนั้นเมื่อต้องการลบ V-Order ออกจากตาราง ให้ตั้งค่าการกําหนดค่าเซสชันเป็น false

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];