หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ:✅ วิศวกรรมข้อมูล Fabric และวิทยาศาสตร์ข้อมูล
สถิติตารางอัตโนมัติใน Microsoft Fabric ช่วยให้ Spark เพิ่มประสิทธิภาพการดําเนินการคิวรีโดยการรวบรวมเมตริกตารางและคอลัมน์สําหรับตารางเดลต้าโดยอัตโนมัติ
- จํานวนแถว
- จํานวน Null ต่อคอลัมน์
- ค่าต่ําสุดและสูงสุดต่อคอลัมน์
- จํานวนค่าที่แตกต่างกันต่อคอลัมน์
- ความยาวคอลัมน์เฉลี่ยและสูงสุด
โดยค่าเริ่มต้น สถิติเพิ่มเติมเหล่านี้จะถูกรวบรวมสําหรับ 32 คอลัมน์แรก (รวมถึงคอลัมน์ที่ซ้อนกัน) ของตารางเดลต้าใน Fabric ข้อมูลนี้ช่วยให้เครื่องมือเพิ่มประสิทธิภาพตามต้นทุน (CBO) ของ Spark ปรับปรุงการวางแผนสําหรับการรวม ตัวกรอง การรวม และการตัดแต่งพาร์ติชัน
ด้วยเหตุนี้ ปริมาณงานจํานวนมากจึงสามารถลดเวลาแฝงในการสืบค้นและคํานวณการใช้งานได้ด้วยการบํารุงรักษาสถิติด้วยตนเองน้อยลง
สําหรับคําแนะนําข้ามปริมาณงานเกี่ยวกับกลยุทธ์การเพิ่มประสิทธิภาพตาราง โปรดดู การบํารุงรักษาและการเพิ่มประสิทธิภาพตารางข้ามปริมาณงาน
ประโยชน์ที่สำคัญ
สถิติอัตโนมัติให้ประโยชน์ดังต่อไปนี้:
- เปิดใช้งานโดยอัตโนมัติสําหรับตารางเดลต้าใน Fabric
- ปรับปรุงคุณภาพการวางแผนคิวรีสําหรับรูปแบบการวิเคราะห์ทั่วไป
- ลดความจําเป็นในการรวบรวมสถิติด้วยตนเองซ้ําๆ
- จัดเก็บสถิติภายนอกไฟล์ข้อมูลตารางเพื่อหลีกเลี่ยงการบวมของไฟล์ข้อมูล
วิธีการทำงาน
Fabric Spark รวบรวมสถิติเพิ่มเติม ณ เวลาเขียนและใช้ในระหว่างการวางแผน
ขอบเขตและพฤติกรรมการรวบรวม:
- สถิติจะถูกรวบรวมในเวลาเขียน
- คอลเลกชันกําหนดเป้าหมาย 32 คอลัมน์แรก (รวมถึงคอลัมน์ที่ซ้อนกัน)
- คุณสมบัติของตารางสามารถแทนที่ลักษณะการทํางานระดับเซสชันได้
- การกําหนดค่าจะควบคุมว่า Spark จะแทรกสถิติลงในเครื่องมือเพิ่มประสิทธิภาพหรือไม่
เมตริกเหล่านี้ช่วยให้ Spark เลือกกลยุทธ์การรวมที่ดีขึ้นปรับปรุงการตัดแต่งพาร์ติชันและเพิ่มประสิทธิภาพแผนการรวม
เปิดหรือปิดการรวบรวมสถิติ
ใช้การกําหนดค่าเซสชัน (พื้นที่ทํางานหรือขอบเขตสมุดบันทึก) หรือคุณสมบัติของตาราง (ขอบเขตต่อตาราง)
การกําหนดค่าเซสชัน
คุณสามารถเปิดใช้งานหรือปิดใช้งานคอลเลกชันสถิติแบบขยายเวลาและการใส่ตัวปรับให้เหมาะสมในระดับเซสชันได้
การตั้งค่าเหล่านี้สามารถนําไปใช้ผ่าน Spark SQL, PySpark หรือ Scala Spark
รันคําสั่ง Spark SQL ต่อไปนี้เพื่อเปิดใช้งานการฉีด collection และ optimizer:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;
หากต้องการปิดใช้งานการตั้งค่าใด ๆ ให้ใช้คําสั่งเดียวกันโดยตั้งค่าเป็น false.
หมายเหตุ
ต้องเปิดใช้งานคอลเลกชันสถิติของบันทึกส่วนที่แตกต่าง (spark.databricks.delta.stats.collect) (ค่าเริ่มต้น: จริง)
Important
หากคุณเปิดใช้งาน เวกเตอร์การลบ บนตาราง ให้ปิดใช้งานการแทรกสถิติสําหรับตารางนั้น บนตารางที่ใช้เวกเตอร์การลบที่มีการอัปเดตหรือลบบ่อยครั้งสถิติเพิ่มเติมอาจไม่ถูกต้องและทําให้ Spark ประเมินขนาดตารางต่ําเกินไป เมื่อสิ่งนี้เกิดขึ้น เครื่องมือเพิ่มประสิทธิภาพอาจเลือกการรวมการออกอากาศที่ไม่เหมาะสม ซึ่งอาจทําให้การสืบค้นล้มเหลว เมื่อต้องการป้องกันลักษณะการทํางานนี้ ให้ปิดใช้งานการแทรกสถิติเพื่อให้เครื่องมือเพิ่มประสิทธิภาพไม่ใช้สถิติที่แทรก:
- ขอบเขตเซสชัน: ตั้งค่า
spark.microsoft.delta.stats.injection.enabledเป็นfalse - ขอบเขตตาราง: ตั้งค่าคุณสมบัติตาราง
delta.stats.extended.injectเป็นfalse
คุณสามารถเปิดใช้งานการรวบรวมสถิติได้ สําหรับตารางที่ใช้เวกเตอร์การลบ ให้ปิดใช้งานเฉพาะการแทรกลงในเครื่องมือเพิ่มประสิทธิภาพเท่านั้น
กลยุทธ์การดูแลตารางอย่างสม่ําเสมอช่วยลดความเสี่ยงนี้
OPTIMIZE จะล้างไฟล์โดยอัตโนมัติเมื่อมีเวกเตอร์ REORG TABLE ... APPLY (PURGE) ลบมากกว่า 5% แถวอ้างอิง และสามารถบังคับให้เขียนใหม่ต่ํากว่าค่าที่กําหนดได้ เนื่องจากสถิติขยายถูกเก็บรวบรวมในขณะเขียน การเขียนซ้ําจะรีเฟรชสถิติสําหรับไฟล์ที่ได้รับผลกระทบ สําหรับตารางที่มีการอัปเดตหรือลบบ่อย ให้ปิดการฉีดระหว่างรอบการบํารุงรักษา
คุณสมบัติของตาราง (แทนที่การกําหนดค่าเซสชัน)
คุณสมบัติของตารางช่วยให้คุณสามารถควบคุมคอลเลกชันสถิติในแต่ละตาราง โดยแทนที่การตั้งค่าเซสชัน
เปิดใช้งานบนตาราง:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'true',
'delta.stats.extended.inject' = 'true'
)
หากต้องการปิดใช้งานคุณสมบัติตารางใด ๆ ให้ตั้งค่าเป็น false.
ลักษณะการทํางานเริ่มต้นของการสร้างตาราง
ใช้การตั้งค่าระดับเซสชันนี้เพื่อปิดใช้งานการประทับตราอัตโนมัติของคุณสมบัติของตารางสถิติเพิ่มเติมเมื่อมีการสร้างตารางใหม่
ใช้คําสั่ง Spark SQL นี้เพื่อปิดใช้งานการตั้งค่าอัตโนมัติเมื่อสร้างตาราง:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
ตรวจสอบสถิติ
คุณสามารถตรวจสอบสถิติที่มีอยู่สําหรับแผนการสืบค้นที่ได้รับการปรับแต่งโดยใช้ Spark APIs API เหล่านี้จะคืนค่าสถิติแผนทั่วไปจากแหล่งใดก็ได้ที่มีอยู่ รวมถึงสถิติแคตตาล็อกของ Spark ผลลัพธ์ไม่ได้ยืนยันว่ามีการเก็บสถิติขยายของ Fabric สําหรับตารางนี้หรือไม่
ตรวจสอบจํานวนแถวและขนาดตาราง (ตัวอย่างสเกลา):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
ตรวจสอบสถิติของคอลัมน์โดยละเอียด:
val stats = spark.read.table("tableName").queryExecution.optimizedPlan.stats
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}")
}
คํานวณสถิติใหม่
สถิติอาจล้าสมัยหลังจากการเปลี่ยนแปลงสคีมาหรือการอัปเดตบางส่วน ใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อคํานวณใหม่
เขียนตารางใหม่ (หมายเหตุ: ประวัติการรีเซ็ตนี้):
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
วิธีที่แนะนํา (Fabric Spark >= 3.2.0.19):
from pyspark.sql.delta import StatisticsStore
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
หากสคีมาเปลี่ยนแปลง (เช่น คุณเพิ่มหรือลบคอลัมน์) ให้ลบสถิติเก่าก่อนคํานวณใหม่:
from pyspark.sql.delta import StatisticsStore
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
ใช้ ANALYZE TABLE
ใช้เพื่อ ANALYZE TABLE คํานวณสถิติแคตตาล็อก Spark ในทุกคอลัมน์ คําสั่งนี้จะไม่คํานวณสถิติขยายที่เก็บโดย Automated Table Statistics ใหม่ เพื่อคํานวณสถิติเหล่านั้นใหม่ ให้ใช้ StatisticsStore.recomputeStatisticsWithCompaction.
เรียกใช้คําสั่ง:
เรียกใช้คําสั่ง Spark SQL ต่อไปนี้:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
เปิดใช้งานการใส่สถิติแค็ตตาล็อก:
ใช้คําสั่ง Spark SQL นี้เพื่อเปิดใช้งานการฉีดสถิติแคตตาล็อก:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
หากต้องการปิดการฉีดสถิติแคตตาล็อก ให้ใช้การตั้งค่าเดียวกันโดยตั้งค่าเป็นfalse
ข้อจำกัด
เป็นสิ่งสําคัญที่ต้องทําความเข้าใจข้อจํากัดในปัจจุบันของสถิติอัตโนมัติของ Fabric เพื่อให้คุณสามารถวางแผนได้ตามต้องการ
- สถิติจะถูกรวบรวมในเวลาเขียนเท่านั้น
- การอัปเดตจากกลไกจัดการอื่นจะไม่ถูกรวมโดยอัตโนมัติ
- รวมเฉพาะ 32 คอลัมน์แรกเท่านั้น (รวมถึงคอลัมน์ที่ซ้อนกัน)
- การลบและการอัปเดตอาจทําให้สถิติล้าสมัย สําหรับตารางที่ใช้เวกเตอร์การลบ ตาราง
OPTIMIZEปกติหรือREORG TABLE ... APPLY (PURGE)แบบบํารุงรักษาจะเขียนไฟล์ที่ได้รับผลกระทบใหม่และรีเฟรชสถิติของไฟล์เหล่านั้น ปิดการฉีดสถิติระหว่างรอบการบํารุงรักษาในตารางที่มีการอัปเดตหรือลบบ่อยครั้ง - การคํานวณใหม่ต้องมีการดําเนินการ API การเขียนใหม่หรือสถิติ
- การแทรกสถิติใช้ไม่ได้กับคอลัมน์ที่ซ้อนกัน
- ในปริมาณงานบางอย่าง สถิติที่ค้างหรือไม่สมบูรณ์อาจนําไปสู่การถดถอยได้
-
ANALYZE TABLEการสนับสนุนจํากัดอยู่ที่FOR ALL COLUMNS. - การเปลี่ยนแปลงการเรียงลําดับคอลัมน์หรือการตั้งค่าคอนฟิกอาจต้องมีการรีเฟรชทั้งหมด