Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Spark SQL dapat menggunakan pengoptimal berbasis biaya (CBO) untuk meningkatkan rencana kueri. Ini sangat berguna untuk kueri dengan beberapa gabungan. Agar ini berfungsi, sangat penting untuk mengumpulkan statistik tabel dan kolom dan selalu memperbaruinya.
Mengumpulkan statistik
Untuk mendapatkan manfaat penuh dari CBO, penting untuk mengumpulkan statistik kolom dan statistik tabel . Anda dapat menggunakan ANALYZE TABLE perintah untuk mengumpulkan statistik secara manual.
Tip
Untuk mempertahankan statistik up-to-date, jalankan ANALYZE TABLE setelah menulis ke tabel.
Menggunakan ANALYZE
Pengoptimalan prediktif menjalankan secara otomatis ANALYZE, yaitu perintah untuk mengumpulkan statistik, pada tabel yang dikelola oleh Unity Catalog. Databricks merekomendasikan untuk mengaktifkan pengoptimalan prediktif untuk semua tabel terkelola Unity Catalog untuk menyederhanakan pemeliharaan data dan mengurangi biaya penyimpanan. Lihat ANALYZE TABLE.
Memverifikasi rencana kueri
Ada beberapa cara untuk memverifikasi rencana kueri.
EXPLAIN perintah
Untuk memeriksa apakah rencana menggunakan statistik, gunakan perintah 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 (artinya, beberapa kolom yang diperlukan tidak memiliki statistik).
Dalam Databricks Runtime 16.0 ke atas, output EXPLAIN perintah mencantumkan tabel yang dirujuk yang memiliki statistik hilang, parsial, dan penuh, seperti dalam contoh output berikut:
== 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
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)