Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:✅ Doku Veri Mühendisliği ve Veri Bilimi
Microsoft Fabric'deki Otomatik Tablo İstatistikleri, Delta tabloları için tablo ve sütun ölçümlerini otomatik olarak toplayarak Spark'ın sorgu yürütmeyi iyileştirmesini sağlar.
- Satır sayıları.
- Sütun başına null sayıları.
- Sütun başına en düşük ve en yüksek değerler.
- Sütun başına ayrı değer sayıları.
- Ortalama ve maksimum sütun uzunlukları.
Varsayılan olarak, bu genişletilmiş istatistikler Doku'daki Delta tablolarının ilk 32 sütunu (iç içe sütunlar dahil) için toplanır. Bu veriler Spark'ın maliyet tabanlı iyileştiricisi (CBO), birleştirmeler, filtreler, toplamalar ve bölüm ayıklama planlamasını iyileştirmeye yardımcı olur.
Sonuç olarak, birçok iş yükü, daha az el ile istatistik bakımıyla sorgu gecikmesini ve hesaplama kullanımını azaltabilir.
Tablo iyileştirme stratejileriyle ilgili iş yükleri arası yönergeler için bkz. İş yükleri arası tablo bakımı ve iyileştirmesi.
Temel avantajlar
Otomatik istatistikler aşağıdaki avantajları sağlar:
- Fabric'teki Delta tabloları için otomatik olarak etkinleştirilir.
- Yaygın analiz desenleri için sorgu planlama kalitesini artırır.
- Yinelenen el ile istatistik toplama gereksinimini azaltır.
- Veri dosyası şişkinliklerini önlemek için istatistikleri tablo veri dosyalarının dışında depolar.
Nasıl çalışır?
Fabric Spark, yazma zamanında genişletilmiş istatistikler toplar ve bunları planlama sırasında kullanır.
Koleksiyon kapsamı ve davranışı:
- İstatistikler yazma zamanında toplanır.
- Koleksiyon, ilk 32 sütunu (iç içe sütunlar dahil) hedefler.
- Tablo özellikleri oturum düzeyi davranışını geçersiz kılabilir.
- Yapılandırma, Spark'ın iyileştiriciye istatistik ekleyip eklemediğini denetler.
Bu ölçümler Spark'ın daha iyi birleştirme stratejileri seçmesini, bölüm ayıklamayı geliştirmesini ve toplama planlarını iyileştirmesini sağlar.
İstatistik toplamayı etkinleştirme veya devre dışı bırakma
Oturum yapılandırmasını (çalışma alanı veya not defteri kapsamı) veya tablo özelliklerini (tablo başına kapsam) kullanın.
Oturum yapılandırması
Oturum düzeyinde genişletilmiş istatistik toplamayı ve iyileştirici eklemeyi etkinleştirebilir veya devre dışı bırakabilirsiniz.
Bu ayarlar Spark SQL, PySpark veya Scala Spark aracılığıyla uygulanabilir.
Toplama ve optimizer enjeksiyonunu etkinleştirmek için aşağıdaki Spark SQL statement'larını çalıştırın:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;
İki ayardan birini devre dışı bırakmak için, değeri false olarak ayarlanmış aynı komutu kullanın.
Uyarı
Delta günlüğü istatistikleri koleksiyonu (spark.databricks.delta.stats.collect) da etkinleştirilmelidir (varsayılan: true).
Important
Bir tabloda silme vektörlerini etkinleştirirseniz, bu tablo için istatistik eklemeyi devre dışı bırakın. Sık güncelleştirmeleri veya silmeleri olan silme vektörlerini kullanan tablolarda, genişletilmiş istatistikler yanlış olabilir ve Spark'ın tablo boyutunu hafife almasına neden olabilir. Bu durumda, iyileştirici uygun olmayan bir yayın katılımı seçebilir ve bu da sorguların başarısız olmasına neden olabilir. Bu davranışı önlemek için, iyileştiricinin eklenen istatistikleri kullanmaması için istatistik eklemeyi devre dışı bırakın:
- Oturum kapsamı:
spark.microsoft.delta.stats.injection.enabled,falseolarak ayarlanır. - Tablo kapsamı:
delta.stats.extended.injecttablo özelliğinifalseolarak ayarlayın.
İstatistik koleksiyonunu etkin tutabilirsiniz. Silme vektörleri kullanan tablolar için yalnızca iyileştiriciye eklemeyi devre dışı bırakın.
Düzenli bir masa bakım stratejisi bu riski azaltır.
OPTIMIZE Silme vektörleriyle 5% den fazla satıra referans verilen dosyaları otomatik olarak temizler ve REORG TABLE ... APPLY (PURGE) bu eşik altında yeniden yazmayı zorunlu kılar. Genişletilmiş istatistikler yazma zamanında toplandığı için, yeniden yazma etkilenen dosyalar için istatistikleri yeniler. Sık güncellenen veya sililen tablolar için, enjeksiyonu bakım döngüleri arasında devre dışı bırakın.
Tablo özellikleri (oturum yapılandırmasını devre dışı bırak)
Tablo özellikleri, oturum ayarlarını geçersiz kılarak tek tek tablolarda istatistik toplamayı denetlemenize olanak sağlar.
Tabloda etkinleştir:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'true',
'delta.stats.extended.inject' = 'true'
)
Her iki tablo özelliğini devre dışı bırakmak için değerini olarak ayarlayın false.
Tablo oluşturma varsayılan davranışı
Yeni tablolar oluşturulduğunda genişletilmiş istatistik tablosu özelliklerinin otomatik damgalama özelliğini devre dışı bırakmak için bu oturum düzeyi ayarını kullanın.
Tablo oluşturma sırasında otomatik ayarı devre dışı bırakmak için bu Spark SQL deyimini kullanın:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
İstatistikleri denetleme
Optimize edilmiş bir sorgu planının mevcut istatistiklerini Spark API'leri kullanarak inceleyebilirsiniz. Bu API'ler, Spark katalog istatistikleri dahil olmak üzere mevcut herhangi bir kaynaktan genel plan istatistiklerini geri getirir. Sonuç, tabloya ilişkin Fabric genişletilmiş istatistiklerinin toplandığını doğrulamaz.
Satır sayısını ve tablo boyutunu denetleyin (Scala örneği):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Ayrıntılı sütun istatistiklerini denetleyin:
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}")
}
İstatistikleri yeniden derleme
Şema değişiklikleri veya kısmi güncelleştirmelerden sonra istatistikler güncel olmayabilir. Yeniden derlemek için aşağıdaki yaklaşımlardan birini kullanın.
Tabloyu yeniden yaz (not: bu işlem geçmişi sıfırlar):
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
Önerilen yaklaşım (Fabric Spark >= 3.2.0.19):
from pyspark.sql.delta import StatisticsStore
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Şema değişirse (örneğin, sütun ekler veya çıkarırlar), eski istatistikleri tekrar hesaplamadan önce kaldırın:
from pyspark.sql.delta import StatisticsStore
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
ANALYZE TABLE’i kullanın
Tüm sütunlar boyunca Spark kataloğu istatistiklerini hesaplamak için kullanılır ANALYZE TABLE . Bu komut, Otomatik Tablo İstatistikleri tarafından depolanan genişletilmiş istatistikleri yeniden hesaplamaz. Bu istatistikleri yeniden hesaplamak için StatisticsStore.recomputeStatisticsWithCompaction kullanın.
Komutu çalıştırın:
Aşağıdaki Spark SQL deyimini çalıştırın:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Katalog istatistikleri eklemeyi etkinleştir:
Katalog istatistiği enjeksiyonunu etkinleştirmek için bu Spark SQL ifadesini kullanın:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
Katalog istatistikleri enjeksiyonunu devre dışı bırakmak için aynı ayarı, değeri false olarak ayarlanmış şekilde kullanın.
Sınırlamalar
Fabric'in otomatik istatistiklerinin mevcut sınırlamalarını anlamak, uygun şekilde planlama yapabilmeniz açısından önemlidir.
- İstatistikler yalnızca yazma zamanında toplanır.
- Diğer altyapılardan gelen güncelleştirmeler otomatik olarak toplanmaz.
- Yalnızca ilk 32 sütun dahil edilir (iç içe sütunlar dahil).
- Silmeler ve güncelleştirmeler istatistikleri eskitebilir. Silme vektörleri kullanan tablolar için, düzenli
OPTIMIZEveyaREORG TABLE ... APPLY (PURGE)bakım etkilenen dosyaları yeniden yazar ve istatistiklerini yeniler. Sık güncellemeler veya silmelerle tablolarda bakım döngüleri arasında istatistik enjeksiyonunu devre dışı bırakın. - Yeniden derleme için yeniden yazma veya istatistik API'si işlemi gerekir.
- İstatistik ekleme iç içe sütunlara uygulanmaz.
- Bazı iş yüklerinde eski veya eksik istatistikler regresyonlara yol açabilir.
-
ANALYZE TABLEdesteğiFOR ALL COLUMNSile sınırlıdır. - Sütun sıralama veya yapılandırma değişiklikleri tam yenileme gerektirebilir.