Maliyet tabanlı 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 de tablo istatistiklerinitoplamak önemlidir. İstatistikler, ANALYZE TABLE komutu kullanılarak toplanabilir.
İpucu
İstatistikleri güncel tutmak için tabloya yazdıktan sonra komutunu çalıştırın ANALYZE TABLE
.
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 komutlarını kullanın
- Databricks Runtime 7.x ve üzeri: EXPLAIN
İ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. Eksikse rowCount
, bunu hesaplamak için yeterli bilgi olmadığı anlamına gelir (başka bir deyişle, bazı gerekli sütunlarda istatistik yoktur).
Spark SQL Kullanıcı Arabirimi
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ğını değiştirerek CBO'yi spark.sql.cbo.enabled
devre dışı bırakırsınız.
spark.conf.set("spark.sql.cbo.enabled", false)
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin