提示
適用於:磚的SQL磚運行時
提出具體的方法生成一個執行計劃。
分區提示
分區提示讓你建議一個磚應該遵循的劃分策略。合並
,重新分區
,REPARTITION_BY_RANGE
提示和支持是等價的合並
,重新分區
,repartitionByRange
分別為數據集的api。這些提示給你一種優化性能和控製輸出文件的數量。當多個分區提示指定,多個節點插入到邏輯的計劃,但由優化器選擇最左邊的暗示。
分區提示類型
合並
減少分區指定數量的分區。需要分區號作為參數。
重新分區
重新分配到指定數量的分區使用指定的分區表達式。需要分區號,列名或作為參數。
REPARTITION_BY_RANGE
重新分配到指定數量的分區使用指定的分區表達式。需要列名稱和一個可選的分區號作為參數。
平衡
的
平衡
提示可以用來調整查詢結果輸出分區,所以每個分區都是一個合理的大小(不太小,不太大)。它可以列名作為參數,全力分區這些列的查詢結果。這是一個最優:如果有傾斜,火花將把傾斜的分區,這些分區不是太大。這個暗示是非常有用的,當你需要寫這個查詢的結果表,以避免過小/大文件。如果沒有啟用AQE這個提示是忽略。
例子
>選擇* / / * +合並(3)*從t;>選擇/ * +重新分區(3)* /*從t;>選擇* / / * +重新分區(c)*從t;>選擇/ * +重新分區(3 c) * /*從t;>選擇* / / * + REPARTITION_BY_RANGE (c)*從t;>選擇/ * + REPARTITION_BY_RANGE (3 c) * /*從t;>選擇/ * +平衡* /*從t;>選擇* / / * +平衡(c)*從t;——多個分區提示>解釋擴展選擇/ * +重新分配(100),合並(500),REPARTITION_BY_RANGE (3 c) * /*從t;= =解析邏輯計劃= =“UnresolvedHint重新分區,[100]+ - - - - - - 'UnresolvedHint合並,(500年]+ -“UnresolvedHint REPARTITION_BY_RANGE, [3》c]+ -”項目(*)+ - - - - - - 'UnresolvedRelation(t]= =分析了邏輯計劃= =的名字:字符串,c:int重新分區One hundred.,真正的+ -重新分區500年,假+ -RepartitionByExpression(c#30.ASC零位第一個),3+ -項目(的名字#29日,c#30.]+ -SubqueryAliasspark_catalog。默認的。t+ -關係(的名字#29日,c#30.]拚花= =優化邏輯計劃= =重新分區One hundred.,真正的+ -關係(的名字#29日,c#30.]拚花= =物理計劃= =交換RoundRobinPartitioning(One hundred.),假,(id= #121年]+ -*(1)ColumnarToRow+ -FileScan拚花默認的。t(的名字#29日,c#30.]批處理:真正的,DataFilters:[],格式:拚花,位置:CatalogFileIndex(文件:/火花/火花- - - - - -倉庫/t),PartitionFilters:[],PushedFilters:[],ReadSchema:結構體<的名字:字符串>
加入提示
加入提示讓你建議加入策略磚SQL應該使用。當雙方指定不同的連接策略提示的加入,磚SQL將按照以下順序提示:廣播
在合並
在SHUFFLE_HASH
在SHUFFLE_REPLICATE_NL
。當雙方指定的廣播
提示或SHUFFLE_HASH
提示,磚SQL選擇構建基於連接類型和大小的關係。從一個給定的策略可能不支持所有的連接類型,磚SQL是不能保證使用連接策略建議的提示。
加入提示類型
廣播
使用廣播加入。連接的提示是廣播不管
autoBroadcastJoinThreshold
。如果雙方的加入有廣播提示,規模較小的廣播(基於統計數據)。的別名廣播
是BROADCASTJOIN
和MAPJOIN
。合並
使用隨機排序合並連接。的別名
合並
是SHUFFLE_MERGE
和MERGEJOIN
。SHUFFLE_HASH
使用隨機散列連接。如果雙方有洗牌散列提示,磚SQL選擇較小(基於統計)構建。
SHUFFLE_REPLICATE_NL
使用shuffle-and-replicate嵌套循環聯接。
例子
——連接提示播放連接>選擇* / / * +廣播(t1)*從t1內心的加入t2在t1。關鍵=t2。關鍵;>選擇* / / * + BROADCASTJOIN (t1)*從t1左加入t2在t1。關鍵=t2。關鍵;>選擇* / / * + MAPJOIN (t2)*從t1正確的加入t2在t1。關鍵=t2。關鍵;——加入提示洗牌排序合並連接>選擇* / / * + SHUFFLE_MERGE (t1)*從t1內心的加入t2在t1。關鍵=t2。關鍵;>選擇* / / * + MERGEJOIN (t2)*從t1內心的加入t2在t1。關鍵=t2。關鍵;>選擇* / / * +合並(t1)*從t1內心的加入t2在t1。關鍵=t2。關鍵;——隨機散列連接的連接提示>選擇* / / * + SHUFFLE_HASH (t1)*從t1內心的加入t2在t1。關鍵=t2。關鍵;——加入提示shuffle-and-replicate嵌套循環聯接>選擇* / / * + SHUFFLE_REPLICATE_NL (t1)*從t1內心的加入t2在t1。關鍵=t2。關鍵;——當雙方指定不同的連接策略提示的加入,磚SQL——重視廣播提示的提示在SHUFFLE_HASH提示合並——在SHUFFLE_REPLICATE_NL提示。——磚SQL將在以下示例發出警告——org.apache.spark.sql.catalyst.analysis。HintErrorLogger:提示(策略=合並)——是被另一個提示,不會生效。選擇/ * +廣播(t1)、合並(t1, t2) * /*從t1內心的加入t2在t1。關鍵=t2。關鍵;
傾斜的暗示
(三角洲湖)傾斜連接優化的審理情況和有關信息。斜
提示。