基於成本的優化器

火花SQL可以使用一個基於成本的優化器(CBO)來提高查詢計劃。這是特別有用的查詢與多個連接。為此收集表和列統計信息是至關重要的,保持最新。

收集統計信息

得到的全部利益CBO收集都是很重要的列統計表統計信息。命令可以使用收集統計分析表。

提示

保持數據更新,運行分析寫完。

驗證查詢計劃

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

解釋命令

檢查如果計劃使用統計數據,使用SQL命令

  • 磚運行時7。x,上圖:解釋

如果統計數據丟失,那麼查詢計劃可能不是最優的。

= =優化邏輯計劃= =(s_store_sk),(s_store_sk,(1)作為(1)l),統計數據(sizeInBytes=20.0B,rowCount=1,提示=沒有一個)+ -項目(s_store_sk),統計數據(sizeInBytes=18.5MB,rowCount=1.62 e + 6,提示=沒有一個)+ -加入內心的,(d_date_sk=ss_sold_date_sk),統計數據(sizeInBytes=30.8MB,rowCount=1.62 e + 6,提示=沒有一個):- - - - - -項目(ss_sold_date_sk,s_store_sk),統計數據(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=沒有一個):+ -加入內心的,(s_store_sk=ss_store_sk),統計數據(sizeInBytes=48.9GB,rowCount=2.63 e + 9,提示=沒有一個)::- - - - - -項目(ss_store_sk,ss_sold_date_sk),統計數據(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=沒有一個)::+ -過濾器(isnotnull(ss_store_sk)& &isnotnull(ss_sold_date_sk)),統計數據(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=沒有一個)::+ -關係(ss_store_sk,ss_sold_date_sk]拚花,統計數據(sizeInBytes=134.6GB,rowCount=2.88 e + 9,提示=沒有一個):+ -項目(s_store_sk),統計數據(sizeInBytes=11.7KB,rowCount=1.00 e + 3,提示=沒有一個):+ -過濾器isnotnull(s_store_sk),統計數據(sizeInBytes=11.7KB,rowCount=1.00 e + 3,提示=沒有一個):+ -關係(s_store_sk]拚花,統計數據(sizeInBytes=88.0KB,rowCount=1.00 e + 3,提示=沒有一個)+ -項目(d_date_sk),統計數據(sizeInBytes=12.0B,rowCount=1,提示=沒有一個)+ -過濾器((((isnotnull(d_year)& &isnotnull(d_date))& &(d_year=2000年))& &(d_date=2000年- - - - - -12- - - - - -31日))& &isnotnull(d_date_sk)),統計數據(sizeInBytes=38.0B,rowCount=1,提示=沒有一個)+ -關係(d_date_sk,d_date,d_year]拚花,統計數據(sizeInBytes=1786.7KB,rowCount=7.30 e + 4,提示=沒有一個)

重要的

rowCount統計查詢與多個連接尤為重要。如果rowCount丟失,這意味著沒有足夠的信息來計算(也就是說,一些需要列沒有數據)。

火花SQL用戶界麵

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

失蹤的估計

失蹤的估計

等一行輸出:2451005年美國東部時間:N /一個意味著這個運營商產生大約2 m行,沒有數據可用。

好估計

好估計

等一行輸出:2451005年美國東部時間:1616404(1 x)意味著這個操作符產生約。2 m行,估計是約。1.6米和估計誤差因素是1。

壞的估計

壞的估計

等一行輸出:2451005年美國東部時間:2626656323意味著這個運營商產生大約2 m行,估計是2 b行,所以估計誤差因素是1000。

禁用基於成本的優化器

CBO默認情況下是啟用的。你禁用CBO通過改變spark.sql.cbo.enabled國旗。

火花相依(“spark.sql.cbo.enabled”,)