基於成本的優化器

Spark SQL可以使用基於成本的優化器(CBO)來改進查詢計劃。這對於具有多個連接的查詢特別有用。要做到這一點,收集表和列的統計信息並使它們保持最新是至關重要的。

收集統計信息

為了充分獲得CBO的好處,重要的是將兩者都收集起來列統計而且表統計信息.可以使用ANALYZE TABLE命令收集統計信息。

提示

要保持最新的統計信息,請運行分析表格寫完後要上表。

驗證查詢計劃

有幾種方法可以驗證查詢計劃。

解釋命令

要檢查計劃是否使用統計信息,請使用SQL命令

  • Databricks RuntimeX及以上:解釋

如果缺少統計信息,則查詢計劃可能不是最優的。

= =優化邏輯計劃= =s_store_sk],s_store_sk1作為1l],統計數據sizeInBytes20.0BrowCount1提示沒有一個+-項目s_store_sk],統計數據sizeInBytes18.5MBrowCount1.62 e + 6提示沒有一個+-加入內心的d_date_skss_sold_date_sk),統計數據sizeInBytes30.8MBrowCount1.62 e + 6提示沒有一個-項目ss_sold_date_sks_store_sk],統計數據sizeInBytes39.1GBrowCount2.63 e + 9提示沒有一個+-加入內心的s_store_skss_store_sk),統計數據sizeInBytes48.9GBrowCount2.63 e + 9提示沒有一個-項目ss_store_skss_sold_date_sk],統計數據sizeInBytes39.1GBrowCount2.63 e + 9提示沒有一個+-過濾器isnotnullss_store_sk& &isnotnullss_sold_date_sk)),統計數據sizeInBytes39.1GBrowCount2.63 e + 9提示沒有一個+-關係ss_store_skss_sold_date_sk拚花統計數據sizeInBytes134.6GBrowCount2.88 e + 9提示沒有一個+-項目s_store_sk],統計數據sizeInBytes11.7KBrowCount1.00 e + 3提示沒有一個+-過濾器isnotnulls_store_sk),統計數據sizeInBytes11.7KBrowCount1.00 e + 3提示沒有一個+-關係s_store_sk拚花統計數據sizeInBytes88.0KBrowCount1.00 e + 3提示沒有一個+-項目d_date_sk],統計數據sizeInBytes12.0BrowCount1提示沒有一個+-過濾器((((isnotnulld_year& &isnotnulld_date))& &d_year2000))& &d_date2000-12-31))& &isnotnulld_date_sk)),統計數據sizeInBytes38.0BrowCount1提示沒有一個+-關係d_date_skd_dated_year拚花統計數據sizeInBytes1786.7KBrowCount7.30 e + 4提示沒有一個

重要的

rowCount對於具有多個連接的查詢,統計信息尤其重要。如果rowCount缺失,這意味著沒有足夠的信息來計算它(也就是說,一些必需的列沒有統計信息)。

Spark SQL界麵

使用Spark SQL UI頁麵查看執行計劃和統計數據的準確性。

失蹤的估計

失蹤的估計

一行如輸出:2451005年美國東部時間:N/A意味著該操作符產生了大約2M行,並且沒有可用的統計數據。

好估計

好估計

一行如輸出:2451005年美國東部時間:1616404(1 x)表示這個運算符產生約。2M行,而估計約。1.6M,估計誤差因子為1。

壞的估計

壞的估計

一行如輸出:2451005年美國東部時間:2626656323表示該算子產生約2M行,而估計為2B行,因此估計誤差因子為1000。

禁用基於成本的優化器

缺省情況下,CBO為開啟狀態。您可以通過更改spark.sql.cbo.enabled國旗。

火花相依“spark.sql.cbo.enabled”