หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ:✅ วิศวกรข้อมูลและวิทยาศาสตร์ข้อมูลใน 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 - การเรียงลําดับคอลัมน์หรือการเปลี่ยนแปลงการกําหนดค่าจําเป็นต้องมีการเขียนใหม่ทั้งหมดเพื่อรีเฟรชสถิติ