Azure-Sql-Data-Warehouse
為什麼循環分佈更適合偏斜數據集?
我有一個傾斜的數據集,其中大多數行屬於我的最佳候選分佈鍵的最大 10 個值。我的數據由兩個大表組成,它們隻共享兩個鍵——我最好的候選鍵,再加上一個,但是那個 80% 的時間是空的,所以我把它作為一個選項打折了。
傳統觀點認為,如果數據有偏差,我應該使用循環分佈。查看表上連接產生的解釋計劃,我看到我的候選列是隨機移動的隨機鍵。這讓我懷疑我是否應該將分佈從循環更改為散列分佈,從而節省每次執行時移動數據所需的時間。
我的邏輯正確嗎?在使用分佈式 sql 時,我覺得這違背了傳統智慧。我不希望任何不需要此連接的查詢,因此這可能是其他人會看到好處的地方。
由於其性質,循環法總是需要數據移動,但它不必對您的性能造成災難性的影響。將其用於偏斜數據的原因是,當您通過散列分佈時,會為每個值生成唯一的散列,並且相應地分佈在 60 個分佈中的行。在您的範例中,您的大部分數據最終會出現在一個(或幾個)分佈上,因此您沒有利用可用的計算。假設您只有機會利用 20% 的可用計算資源,其餘的則處於空閒狀態。
對好的雜湊列的要求是:它們不應該是可更新的,不能為空的,應該有大量不同的值並且分佈均勻。
您是否可以選擇從其他人創建連接密鑰?這可以幫助創建更均勻的分佈,並且只要您在兩個表之間的連接中使用它就會很有用。
只是一些其他建議,為您的關鍵查詢設計,使用 SQL DW 中可用的其他一些功能,例如正確的 DWU、資源類、非聚集索引、自動統計。另請注意,現在可以使用第 2 代 SQL DW 。
高溫高壓