傾斜連接優化
數據傾斜時,一個表的數據分區中集群分布是不均勻的。數據傾斜會嚴重降低性能的查詢,特別是那些與連接。加入大表之間需要交換數據和傾斜會導致集群中的一個極端不平衡的工作。查詢數據傾斜的影響如果查詢似乎卡完成很少的任務(例如,最後3任務的200)。驗證數據傾斜影響查詢:
單擊階段,並驗證它是做一個連接。
查詢完成後,找到一個加入的階段和檢查任務持續時間分布。
排序的任務通過減少持續時間和檢查前幾個任務。如果一個任務比其他任務花了更長的時間來完成,有傾斜。
改善斜,三角洲湖磚SQL接受傾斜的暗示在查詢。從傾斜的信息提示,磚運行時可以構造一個更好的查詢計劃,不存在數據傾斜。
請注意
與磚運行時7.3及以上,斜加入提示不需要。傾斜自動照顧如果自適應查詢執行(AQE)和spark.sql.adaptive.skewJoin.enabled
都是啟用的。看到自適應查詢執行。
斜提示配置關係的名字
斜提示必須包含至少與傾斜的名稱。一個關係表、視圖或子查詢。所有與這個關係連接然後使用傾斜連接優化。
——表與傾斜選擇/ * +斜* /(“訂單”)*從訂單,beplay体育app下载地址在哪裏c_custId=o_custId——子查詢與斜選擇/ * +斜(C1) * /*從(選擇*從beplay体育app下载地址在哪裏c_custId<One hundred.)C1,訂單在哪裏C1。c_custId=o_custId
斜提示配置關係名和列名
可能有多個連接關係,隻有其中的一些將遭受傾斜。傾斜連接優化有一些開銷,所以最好隻在需要時使用它。為此,斜提示接受列名。隻有加入這些列使用傾斜連接優化。
——單一列選擇/ * +斜(“訂單”、“o_custId”) * /*從訂單,beplay体育app下载地址在哪裏o_custId=c_custId——多個列選擇/ * +斜(“訂單”,(“o_custId”、“o_storeRegionId”)) * /*從訂單,beplay体育app下载地址在哪裏o_custId=c_custId和o_storeRegionId=c_regionId
斜提示配置關係名稱、列名和傾斜值
您還可以指定傾斜值提示。根據查詢和數據,傾斜值可能是已知的(例如,因為他們永遠不會改變)或可能會很容易發現。這樣做可以減少傾斜連接優化的開銷。否則,三角洲湖自動檢測到它們。
——單柱單斜的價值選擇/ * +斜(“訂單”、“o_custId”, 0) * /*從訂單,beplay体育app下载地址在哪裏o_custId=c_custId——單一列,多個傾斜值選擇/ * +斜(“訂單”、“o_custId”, (0, 1, 2)) * /*從訂單,beplay体育app下载地址在哪裏o_custId=c_custId——多個列,多個傾斜值選擇/ * +斜(“訂單”,(“o_custId”、“o_storeRegionId”), ((0, 1001), (1002))) * /*從訂單,beplay体育app下载地址在哪裏o_custId=c_custId和o_storeRegionId=c_regionId