แชร์ผ่าน


กําหนดค่าและจัดการสถิติตารางอัตโนมัติใน Fabric Spark

นําไปใช้กับ:✅ วิศวกรข้อมูลและวิทยาศาสตร์ข้อมูลใน Microsoft Fabric

สถิติตารางอัตโนมัติใน Microsoft Fabric ช่วยให้ Spark ปรับการดําเนินการคิวรีให้เหมาะสมโดยการรวบรวมเมตริกระดับตารางโดยละเอียดโดยอัตโนมัติ สถิติเหล่านี้รวมถึง:

  • จํานวนแถวทั้งหมด
  • จํานวน Null ต่อคอลัมน์
  • ค่าต่ําสุดและสูงสุดต่อคอลัมน์
  • จํานวนค่าที่แตกต่างกันต่อคอลัมน์
  • ความยาวคอลัมน์เฉลี่ยและสูงสุด

ตามค่าเริ่มต้น สถิติที่ขยาย เหล่านี้จะถูกรวบรวมสําหรับ 32 คอลัมน์แรก (รวมถึงคอลัมน์ที่ซ้อนกัน) ของทุกตาราง Delta ที่สร้างขึ้นใน Fabric ข้อมูลที่รวบรวมช่วยให้ตัวปรับต้นทุน (CBO) ของ Spark ปรับปรุงการวางแผนคิวรีสําหรับการรวม ตัวกรอง การรวม และการตัดแต่งพาร์ติชัน

ผลที่ได้คือ ปริมาณงานสามารถดูการปรับปรุงประสิทธิภาพการทํางานที่มากขึ้นและลดการใช้ทรัพยากรการคํานวณ — ทั้งหมดโดยไม่ต้องมีการเรียกใช้ด้วยตนเอง ANALYZE TABLE หรือการกําหนดค่าที่ซับซ้อน

ประโยชน์หลัก

ส่วนนี้สรุปว่าทําไมสถิติตารางอัตโนมัติมีความสําคัญสําหรับปริมาณงานของคุณ

  • ประสิทธิภาพที่เร็วขึ้นประมาณ 45% ในการคิวรีที่ซับซ้อน
  • เปิดใช้งานโดยอัตโนมัติบนตาราง Delta ใหม่
  • ปรับปรุงการวางแผนคิวรีและลดค่าใช้จ่ายในการคํานวณ
  • รองรับการนับค่าที่แตกต่างกัน ต่ําสุด/สูงสุด จํานวน null และเมตริกความยาวคอลัมน์
  • จัดเก็บในรูปแบบ Parquet เพื่อหลีกเลี่ยงการระเบิดไฟล์ข้อมูล

วิธีการทํางาน

นี่คือสิ่งที่เกิดขึ้นเบื้องหลังเมื่อ Fabric Spark รวบรวมสถิติ:

  • จํานวนแถว
  • จํานวน Null ต่อคอลัมน์
  • ค่าต่ําสุดและสูงสุดต่อคอลัมน์
  • จํานวนค่าที่แตกต่างกันต่อคอลัมน์
  • ความยาวคอลัมน์เฉลี่ยและสูงสุด

เมตริกเหล่านี้ช่วยให้ Spark ทําการตัดสินใจอย่างชาญฉลาดเกี่ยวกับวิธีการดําเนินการคิวรี — ปรับปรุงกลยุทธ์การเข้าร่วม การตัดแต่งกิ่งพาร์ติชัน และประสิทธิภาพการรวม

วิธีการเปิดหรือปิดใช้งาน

เรียนรู้วิธีการควบคุมคอลเลกชันสถิติอัตโนมัติโดยใช้การกําหนดค่าเซสชัน Spark หรือคุณสมบัติตาราง

การกําหนดค่าเซสชัน

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

เปิดใช้งานการรวบรวมสถิติที่ขยาย:

spark.conf.set("spark.microsoft.delta.stats.collect.extended", "true")

ปิดใช้งานคอลเลกชันสถิติเพิ่มเติม:

spark.conf.set("spark.microsoft.delta.stats.collect.extended", "false")

เปิดใช้งานการใส่สถิติลงในตัวปรับให้เหมาะสมคิวรี:

spark.conf.set("spark.microsoft.delta.stats.injection.enabled", "true")

ปิดใช้งานการใส่สถิติ:

spark.conf.set("spark.microsoft.delta.stats.injection.enabled", "false")

หมายเหตุ

ต้องเปิดใช้งานคอลเลกชันสถิติของบันทึกส่วนที่แตกต่าง (spark.databricks.delta.stats.collect) (ค่าเริ่มต้น: จริง)

คุณสมบัติของตาราง (แทนที่การกําหนดค่าเซสชัน)

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

เปิดใช้งานบนตาราง:

ALTER TABLE tableName SET TBLPROPERTIES('delta.stats.extended.collect' = true, 'delta.stats.extended.inject' = true)

ปิดใช้งานบนตาราง:

ALTER TABLE tableName SET TBLPROPERTIES('delta.stats.extended.collect' = false, 'delta.stats.extended.inject' = false)

ปิดใช้งานการตั้งค่าอัตโนมัติของคุณสมบัติตารางเมื่อสร้าง:

spark.conf.set("spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation", "false")

วิธีการตรวจสอบสถิติ

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

ตรวจสอบจํานวนแถวและขนาดตาราง (ตัวอย่างสเกลา):

println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)

ตรวจสอบสถิติของคอลัมน์โดยละเอียด:

spark.read.table("tableName").queryExecution.optimizedPlan.stats.attributeStats.foreach { case (attrName, colStat) =>
println(s"colName: $attrName distinctCount: ${colStat.distinctCount} min: ${colStat.min} max: ${colStat.max} nullCount: ${colStat.nullCount} avgLen: ${colStat.avgLen} maxLen: ${colStat.maxLen}")
    }

การคอมไพล์สถิติใหม่

บางครั้งสถิติอาจล้าสมัยหรือเป็นบางส่วน — ตัวอย่างเช่น หลังจากมีการเปลี่ยนแปลง schema หรือการอัปเดตบางส่วน คุณสามารถคอมไพล์สถิติใหม่ได้โดยใช้วิธีการเหล่านี้

เขียนตารางใหม่ (หมายเหตุ: ประวัติการรีเซ็ตนี้):

spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")

วิธีที่แนะนํา (Fabric Spark >= 3.2.0.19):

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

ถ้าเค้าร่างเปลี่ยนแปลง (เช่น คุณเพิ่ม/วางคอลัมน์) คุณจําเป็นต้องลบสถิติเก่าก่อนที่จะคอมไพล์ใหม่:

StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

การใช้คําสั่งวิเคราะห์

คําสั่ง ANALYZE TABLE มีวิธีรวบรวมสถิติในทุกคอลัมน์ด้วยตนเอง คล้ายกับ Open-source Spark

เรียกใช้คําสั่ง:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

เปิดใช้งานการใส่สถิติแค็ตตาล็อก:

spark.conf.set("spark.microsoft.delta.stats.injection.catalog.enabled", "true")

ปิดใช้งานการใส่สถิติแค็ตตาล็อก:

spark.conf.unset("spark.microsoft.delta.stats.injection.catalog.enabled")

ข้อจำกัด

เป็นสิ่งสําคัญที่ต้องทําความเข้าใจข้อจํากัดในปัจจุบันของสถิติอัตโนมัติของ Fabric เพื่อให้คุณสามารถวางแผนได้ตามต้องการ

  • สถิติที่รวบรวมเฉพาะในเวลาที่เขียนเท่านั้น
  • การอัปเดตหรือการเปลี่ยนแปลงจาก กลไกจัดการอื่น จะไม่รวมกัน
  • รวมเฉพาะ 32 คอลัมน์ แรก (รวมถึงคอลัมน์ที่ซ้อนกัน)
  • การลบหรือการอัปเดต อาจทําให้สถิติล้าสมัย
  • ไม่มีคอมไพล์ใหม่ โดยไม่เขียนตารางใหม่หรือใช้ API
  • ไม่มีการฉีดสถิติ สําหรับคอลัมน์ที่ซ้อนกัน
  • ไม่มีการแสดงแทนประสิทธิภาพการทํางาน →สถิติอาจนําไปสู่การถดถอยได้ในบางครั้ง
  • ANALYZE TABLE ทํางานกับเท่านั้น FOR ALL COLUMNS
  • การเรียงลําดับคอลัมน์หรือการเปลี่ยนแปลงการกําหนดค่าจําเป็นต้องมีการเขียนใหม่ทั้งหมดเพื่อรีเฟรชสถิติ