Aracılığıyla paylaş


Maliyet bazlı iyileştirici

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 sütun istatistiklerini hem detablo istatistiklerini toplamak önemlidir. İstatistikleri el ile toplamak için komutunu kullanabilirsiniz 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.

Eksik tahmin

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.

İyi tahmin

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.

Hatalı tahmin

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)