ปรับแต่งตาราง Delta Lake ด้วย V-order

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

บทความนี้ช่วยให้คุณตัดสินใจได้ว่าจะใช้ลําดับ V เมื่อใด และแสดงรูปแบบการกําหนดค่าและการบํารุงรักษาหลักสําหรับตาราง Delta

ใช้บทความนี้เพื่อ:

  • เข้าใจว่าลําดับ V เปลี่ยนแปลงอะไรและช่วยได้เมื่อไหร่
  • เข้าใจว่าลําดับ Z และ V เสริมกันอย่างไร
  • เลือกระดับการควบคุมที่เหมาะสม: เซสชัน คุณสมบัติตาราง หรือการดําเนินการเขียน
  • ใช้รูปแบบการบํารุงรักษาตารางเดลต้าในบริบทรันไทม์ Spark ที่เหมาะสม

สําหรับคําแนะนําข้ามภาระงานเกี่ยวกับการใช้ V-order ตามสถานการณ์การใช้ ดูที่ การบํารุงรักษาและเพิ่มประสิทธิภาพตารางงานข้ามภาระงาน

ลําดับ V คืออะไร?

V-order คือการปรับแต่งเวลาการเขียนสําหรับไฟล์ Parquet ที่สามารถปรับปรุงประสิทธิภาพการสืบค้นด้านล่างข้ามเอนจิน Fabric

ข้อมูลโดยย่อ:

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

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

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

พฤติกรรม V-order ใน Apache Spark ถูกควบคุมผ่านการตั้งค่าดังต่อไปนี้:

การกำหนดค่า ค่าตามค่าเริ่มต้น คำอธิบาย
spark.sql.parquet.vorder.default false ควบคุมการเขียนลําดับ V ในระดับเซสชัน ตั้งค่าเป็น false ตามค่าเริ่มต้นในพื้นที่ทํางาน Fabric ใหม่
TBLPROPERTIES("delta.parquet.vorder.enabled") ยกเลิกการตั้งค่า ควบคุมพฤติกรรม V-order เริ่มต้นที่ระดับตาราง
ตัวเลือกตัวเขียน DataFrame: parquet.vorder.enabled ยกเลิกการตั้งค่า ใช้ควบคุมลําดับ V ในระดับการเขียน

ใช้คําสั่งต่อไปนี้เพื่อเปิดหรือแทนที่การเขียนแบบ V-order ตามความจําเป็นสําหรับสถานการณ์ของคุณ

V-order จะถูกปิดใช้งานโดยค่าเริ่มต้นในพื้นที่ทํางาน Fabric ใหม่ (spark.sql.parquet.vorder.default=false) เพื่อปรับปรุงประสิทธิภาพการเขียนสําหรับกระบวนการนําเข้าและการแปลง

สําหรับงานที่ต้องอ่านมาก เช่น การสืบค้นแบบโต้ตอบหรือแดชบอร์ด ให้เปิดใช้งาน V-order โดยตั้งค่าspark.sql.parquet.vorder.defaultเป็นtrue คุณยังสามารถสลับไปยัง readHeavyforSpark โปรไฟล์ทรัพยากร ซึ่งจะ ReadHeavy เปิดใช้งาน V-order โดยอัตโนมัติเพื่อประสิทธิภาพที่เน้นการอ่าน

ในรันไทม์ Fabric 1.3 และใหม่กว่า การตั้งค่าจะถูก spark.sql.parquet.vorder.enable ลบออก เนื่องจาก V-order สามารถนําไปใช้โดยอัตโนมัติระหว่างการปรับแต่ง Delta ด้วย OPTIMIZE, คุณไม่จําเป็นต้องใช้การตั้งค่าเก่านี้ หากย้ายข้อมูลจากรันไทม์เวอร์ชันก่อนหน้า ให้นําการตั้งค่านี้ออกจากโค้ด

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

ใช้คําสั่งเหล่านี้เพื่อยืนยันค่าเซสชันปัจจุบันก่อนที่คุณจะเปลี่ยนแปลง

%%sql 
SET spark.sql.parquet.vorder.default 

ปิดการเขียนแบบ V-order ในเซสชัน Apache Spark

ใช้คําสั่งเหล่านี้เมื่อปริมาณงานของคุณเขียนมาก และคุณต้องการการนําเข้าหรือการเขียนการแปลงที่เร็วขึ้น

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

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

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

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

ควบคุมลําดับ V โดยใช้คุณสมบัติของตาราง Delta

ส่วนนี้ใช้ Spark SQL เท่านั้น เนื่องจากคุณสมบัติตารางถูกกําหนดผ่าน SQL DDL และ ALTER TABLE คําสั่ง

ใช้คุณสมบัติของตารางเมื่อคุณต้องการค่าเริ่มต้นระดับตารางที่ใช้กับเซสชันต่างๆ

เปิดใช้งานคุณสมบัติตาราง 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 ในขณะเขียน การตั้งค่าระดับเซสชันและระดับการเขียนยังคงมีความสําคัญ ดังนั้นการเขียนยังสามารถใช้ V-order ได้แม้TBLPROPERTIESจะตั้งค่าเป็นfalse

เปิดหรือปิด 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 ให้อ่าน การบีบอัดตาราง

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

ส่วนนี้ใช้ PySpark เพื่อสาธิต API ตัวเขียน DataFrame รูปแบบเดียวกันนี้มีอยู่ใน Scala DataFrame API พร้อมตัวเลือกที่เทียบเท่า

ใช้ตัวเลือกระดับการเขียนเมื่อคุณต้องการการควบคุมต่อการดําเนินการแทนค่าเริ่มต้นทั้งเซสชันหรือทั้งตาราง

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

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 >= '2025-01-01' AND end_date <= '2025-01-31'")\
  .saveAsTable("myschema.mytable") 

ลําดับ V ใช้ได้เฉพาะกับไฟล์ที่ได้รับผลกระทบจากพรีดิเคตเท่านั้น

ในเซสชันที่ spark.sql.parquet.vorder.default unset หรือ set เป็น false, คําสั่งต่อไปนี้จะเขียนโดยใช้ลําดับ V:

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-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()