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.
Spark SQL, sorgu planlarını geliştirmek için maliyet tabanlı iyileştirici (CBO) kullanabilir. Bu, özellikle birden çok birleşime sahip sorgular için kullanışlıdır. Bunun çalışması için tablo ve sütun istatistiklerinin toplanması ve güncel tutulması kritik önem taşır.
İstatistikleri toplama
CBO'nun tüm avantajlarından yararlanmak için hem ANALYZE TABLE .
İpucu
İstatistikleri güncel tutmak için tabloya yazdıktan sonra ANALYZE TABLE çalıştırın.
ANALYZE komutunu kullanma
Tahmine dayalı iyileştirme, Unity Kataloğu tarafından yönetilen tablolar üzerinde istatistik toplamaya yönelik bir komut olan ANALYZE'ı otomatik olarak çalıştırır. Databricks, veri bakımını basitleştirmek ve depolama maliyetlerini azaltmak için tüm Unity Kataloğu yönetilen tablolarında tahmine dayalı iyileştirmenin etkinleştirilmesini önerir. Bkz.ANALYZE TABLE ... İŞLEM ISTATISTIKLERI.
Sorgu planlarını doğrulama
Sorgu planını doğrulamanın birkaç yolu vardır.
EXPLAIN komut
Planın istatistik kullanıp kullanmadiğini denetlemek için SQL komutunu EXPLAINkullanın.
İstatistikler eksikse sorgu planı en uygun olmayabilir.
== Optimized Logical Plan ==
Aggregate [s_store_sk], [s_store_sk, count(1) AS count(1)L], Statistics(sizeInBytes=20.0 B, rowCount=1, hints=none)
+- Project [s_store_sk], Statistics(sizeInBytes=18.5 MB, rowCount=1.62E+6, hints=none)
+- Join Inner, (d_date_sk = ss_sold_date_sk), Statistics(sizeInBytes=30.8 MB, rowCount=1.62E+6, hints=none)
:- Project [ss_sold_date_sk, s_store_sk], Statistics(sizeInBytes=39.1 GB, rowCount=2.63E+9, hints=none)
: +- Join Inner, (s_store_sk = ss_store_sk), Statistics(sizeInBytes=48.9 GB, rowCount=2.63E+9, hints=none)
: :- Project [ss_store_sk, ss_sold_date_sk], Statistics(sizeInBytes=39.1 GB, rowCount=2.63E+9, hints=none)
: : +- Filter (isnotnull(ss_store_sk) && isnotnull(ss_sold_date_sk)), Statistics(sizeInBytes=39.1 GB, rowCount=2.63E+9, hints=none)
: : +- Relation[ss_store_sk,ss_sold_date_sk] parquet, Statistics(sizeInBytes=134.6 GB, rowCount=2.88E+9, hints=none)
: +- Project [s_store_sk], Statistics(sizeInBytes=11.7 KB, rowCount=1.00E+3, hints=none)
: +- Filter isnotnull(s_store_sk), Statistics(sizeInBytes=11.7 KB, rowCount=1.00E+3, hints=none)
: +- Relation[s_store_sk] parquet, Statistics(sizeInBytes=88.0 KB, rowCount=1.00E+3, hints=none)
+- Project [d_date_sk], Statistics(sizeInBytes=12.0 B, rowCount=1, hints=none)
+- Filter ((((isnotnull(d_year) && isnotnull(d_date)) && (d_year = 2000)) && (d_date = 2000-12-31)) && isnotnull(d_date_sk)), Statistics(sizeInBytes=38.0 B, rowCount=1, hints=none)
+- Relation[d_date_sk,d_date,d_year] parquet, Statistics(sizeInBytes=1786.7 KB, rowCount=7.30E+4, hints=none)
Önemli
İstatistik rowCount , özellikle birden çok birleşime sahip sorgular için önemlidir.
rowCount eksikse, bunu hesaplamak için yeterli bilgi olmadığı anlamına gelir (başka bir deyişle, bazı gerekli sütunlarda istatistik yoktur).
Databricks Runtime 16.0 ve üzeri sürümlerde, komutun çıktısı EXPLAIN aşağıdaki örnek çıktıda olduğu gibi eksik, kısmi ve tam istatistiklere sahip başvuruda bulunılan tabloları listeler:
== Optimizer Statistics (table names per statistics state) ==
missing = date_dim, store
partial =
full = store_sales
Corrective actions: consider running the following command on all tables with missing or partial statistics
ANALYZE TABLE <table-name> COMPUTE STATISTICS FOR ALL COLUMNS
Spark SQL Kullanıcı Arayüzü
Yürütülen planı ve istatistiklerin doğruluğunu görmek için Spark SQL kullanıcı arabirimi sayfasını kullanın.
Gibi rows output: 2,451,005 est: N/A bir satır, bu işlecin yaklaşık 2M satır ürettiği ve kullanılabilir istatistik olmadığı anlamına gelir.
Gibi rows output: 2,451,005 est: 1616404 (1X) bir satır, bu işlecin yaklaşık 2M satır ürettiği, tahmin yaklaşık 1,6M ve tahmin hata faktörü 1 olduğu anlamına gelir.
Gibi rows output: 2,451,005 est: 2626656323 bir satır, bu işlecin tahmin 2B satır iken yaklaşık 2M satır ürettiği anlamına gelir, bu nedenle tahmin hata faktörü 1000'dir.
Maliyet Tabanlı İyileştiriciyi Devre Dışı Bırakma
CBO varsayılan olarak etkindir. Bayrağı değiştirerek CBO'yi devre dışı bırakırsınız.
spark.conf.set("spark.sql.cbo.enabled", false)