Bagikan melalui


Pengoptimal berbasis biaya

Spark SQL dapat menggunakan pengoptimal berbasis biaya (CBO) untuk meningkatkan rencana kueri. Ini sangat berguna untuk kueri dengan beberapa gabungan. Agar ini berhasil, sangat penting untuk mengumpulkan statistik tabel dan kolom lalu membuatnya tetap up to date.

Mengumpulkan statistik

Untuk mendapatkan manfaat penuh dari CBO, penting untuk mengumpulkan statistik kolom dan statistik tabel. Statistik dapat dikumpulkan menggunakan perintah ANALYZE TABLE.

Tip

Untuk menjaga statistik tetap terbaru, jalankan ANALYZE TABLE setelah menulis ke tabel.

Memverifikasi rencana kueri

Ada beberapa cara untuk memverifikasi rencana kueri.

perintah EXPLAIN

Untuk memeriksa apakah paket menggunakan statistik, gunakan perintah SQL

  • Runtime Bahasa Umum Databricks 7.x ke atas: EXPLAIN

Jika statistik hilang maka rencana kueri mungkin tidak optimal.

== 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)

Penting

Statistik rowCount ini sangat penting untuk kueri dengan beberapa gabungan. Jika rowCount hilang, itu berarti tidak ada cukup informasi untuk menghitungnya (yaitu, beberapa kolom yang diperlukan tidak memiliki statistik).

Antarmuka Pengguna Spark SQL

Gunakan halaman antarmuka pengguna Spark SQL untuk melihat rencana yang dieksekusi dan akurasi statistik.

Perkiraan hilang

Garis seperti rows output: 2,451,005 est: N/A itu berarti bahwa operator ini menghasilkan sekitar 2 juta baris dan tidak ada statistik yang tersedia.

Perkiraan yang baik

Garis seperti rows output: 2,451,005 est: 1616404 (1X) itu berarti bahwa operator ini menghasilkan sekitar 2 juta baris, sedangkan perkiraannya sekitar 1,6M dan faktor kesalahan estimasi adalah 1.

Perkiraan buruk

Garis seperti rows output: 2,451,005 est: 2626656323 itu berarti bahwa operator ini menghasilkan sekitar 2 juta baris, sedangkan perkiraannya sekitar 2 juta baris, jadi faktor kesalahan estimasi adalah 1.000.

Menonaktifkan Pengoptimal Cost-Based

CBO diaktifkan secara default. Anda menonaktifkan CBO dengan mengubah bendera spark.sql.cbo.enabled.

spark.conf.set("spark.sql.cbo.enabled", false)