การข้ามไฟล์สําหรับตารางเดลต้า

การข้ามไฟล์เป็นการเพิ่มประสิทธิภาพการอ่านของ Delta Lake ที่ช่วยให้กลไก Spark หลีกเลี่ยงการสแกนไฟล์ข้อมูลที่ไม่สามารถมีแถวที่ตรงกันได้ เนื่องจากกลไกจัดการอ่านข้อมูลน้อยลง คิวรีจึงทํางานเร็วขึ้นและใช้ทรัพยากร I/O น้อยลง

การข้ามไฟล์ทํางานอย่างไร

ทุกครั้งที่มีการเขียนไฟล์ข้อมูลลงในตารางเดลต้า Delta Lake จะบันทึกสถิติคอลัมน์ต่อไฟล์ในบันทึกธุรกรรม สถิติเหล่านี้รวมถึง ค่าต่ําสุดค่าสูงสุด และ จํานวน Null สําหรับแต่ละคอลัมน์ที่จัดทําดัชนีในไฟล์นั้น

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

ตัวอย่างเช่น พิจารณา sales ตารางที่แบ่งพาร์ติชันออกเป็นห้าแฟ้มข้อมูลตามช่วงวันที่:

ไฟล์ สถิติต่ําสุด/สูงสุด ผลสําหรับ WHERE date = '2024-03-15'
ไฟล์ 1 date [2024-01-01 .. 2024-02-28] ข้าม
ไฟล์ 2 date [2024-03-01 .. 2024-03-31] อ่าน ✓
ไฟล์ 3 date [2024-04-01 .. 2024-05-31] ข้าม
ไฟล์ 4 date [2024-06-01 .. 2024-07-31] ข้าม
ไฟล์ 5 date [2024-08-01 .. 2024-09-30] ข้าม

ในกรณีนี้ ระบบจะข้ามไฟล์ 4 ใน 5 ไฟล์ โดยสแกนข้อมูลน้อยลง 80% เนื่องจากช่วงต่ําสุด/สูงสุดไม่ทับซ้อนกับค่าตัวกรอง

สำคัญ

ชนิดข้อมูลของค่าเพรดิเคตต้องตรงกับชนิดคอลัมน์ ชนิดที่ไม่ตรงกันสามารถป้องกันไม่ให้กลไกจัดการใช้สถิติระดับไฟล์สําหรับการข้าม

การทำงานตามค่าเริ่มต้น

Delta Lake รวบรวมสถิติไฟล์โดยอัตโนมัติด้วยค่าเริ่มต้นต่อไปนี้:

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

delta.dataSkippingNumIndexedColsคุณสมบัติตารางจะควบคุมขีดจํากัดของคอลัมน์ คอลัมน์ที่เกินเกณฑ์นั้นจะไม่ได้รับสถิติระดับไฟล์และไม่สามารถเข้าร่วมในการข้ามไฟล์ได้

ประเภทข้อมูลที่มีสิทธิ์

คอลัมน์บางชนิดไม่สนับสนุนสถิติระดับไฟล์ ดังนั้นการข้ามไฟล์ กลไกจัดการจะประเมินชนิดข้อมูลของแต่ละคอลัมน์เพื่อพิจารณาว่าสามารถรวบรวมสถิติต่ําสุด/สูงสุดได้หรือไม่

มีสิทธิ์เสมอ (ประเภทอะตอม)

  • NumericType(ByteType, , , ShortTypeIntegerType, LongType, , FloatType) DoubleTypeDecimalType
  • DateType
  • TimestampType
  • TimestampNTZType
  • StringType

มีสิทธิ์ตามเงื่อนไข

Note

ชนิดต่อไปนี้สามารถเปิดใช้งานในการเริ่มต้นรันไทม์ Fabric Spark 2.0 (เดลต้า 4.1)

  • VariantType: เมื่อ spark.databricks.delta.variantShredding.collectVariantDataSkippingStats เปิดใช้งาน
  • ArrayType: เมื่อ spark.microsoft.delta.skipping.complexTypes.enabled เปิดใช้งานและประเภทองค์ประกอบมีสิทธิ์
  • MapType: เมื่อ spark.microsoft.delta.skipping.complexTypes.enabled เปิดใช้งาน และทั้งประเภทคีย์และค่ามีสิทธิ์

ไม่มีสิทธิ์

  • BinaryType
  • BooleanType
  • StructType (โดยรวม - ทุ่งใบไม้ภายในโครงสร้างจะได้รับการประเมินเป็นรายบุคคล)
  • NullType

เพิ่มความครอบคลุมของคอลัมน์ให้สูงสุด

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

จัดตําแหน่งคอลัมน์ที่กรองบ่อยก่อน

วางคอลัมน์ที่ปรากฏบ่อย WHERE ที่สุดในส่วนคําสั่ง คีย์รวม และกรองเพรดิเคตในตําแหน่งลําดับ 32 ตําแหน่งแรกของ Schema ตาราง ย้ายคอลัมน์สตริงยาวหรือคอลัมน์ที่มีการเลือกต่ําเกินตําแหน่ง 32 เพื่อหลีกเลี่ยงการเสียค่าใช้จ่ายในการเขียนกับสถิติที่ไม่ค่อยช่วย

ALTER TABLE table_name ALTER COLUMN long_str_col AFTER last_indexed_col

เพิ่มจํานวนคอลัมน์ที่จัดทําดัชนี

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

ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')

Note

การเพิ่มจํานวนคอลัมน์ที่จัดทําดัชนีจะเพิ่มค่าใช้จ่ายในการเขียนสําหรับทุกไฟล์ข้อมูล เพิ่มค่านี้เฉพาะเมื่อคอลัมน์พิเศษถูกใช้บ่อยในเพรดิเคตตัวกรอง

ระบุคอลัมน์ที่แน่นอนสําหรับสถิติ

ใช้เพื่อ delta.dataSkippingStatsColumns ควบคุมอย่างชัดเจนว่าคอลัมน์ใดจะได้รับสถิติไฟล์ โดยไม่คํานึงถึงตําแหน่งลําดับ:

ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')

เมื่อ delta.dataSkippingStatsColumns ตั้งค่า เฉพาะคอลัมน์ที่ระบุเท่านั้นที่ได้รับการรวบรวมสถิติ วิธีการนี้ช่วยให้คุณควบคุมการแลกเปลี่ยนระหว่างต้นทุนการเขียนและประโยชน์ในการอ่านได้อย่างละเอียด

รวมการข้ามไฟล์กับเค้าโครงข้อมูล

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

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพเค้าโครงข้อมูล โปรดดู การบดอัดตาราง การจัดกลุ่ม Liquid และ Z-Order