การปรับตาราง 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, ...)];