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.
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.
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.
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)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk