對於數倉開發來說,寫好一條SQL,需要熟讀Hive 源碼。hive 默認的優化器有10種,其中這三種比較關鍵:
FilterPPD 會把可以下推的謂詞抽取出來,存入OpWalkerInfo.opToPushdownPredMap.pushdownPreds 中
JoinPPD 的主要作用就是把能夠下推的謂詞和不能夠下推的謂詞分開,將不能夠下推的謂詞重新生成FilterOperator –> FIL[8]
TableScanPPD 將能夠下推的謂詞生成FIL[9] 並置於TS[0]之后
CDH6.2.1- hive 2.1.1 中謂詞下推主要體現在兩個方面:
(1)優化邏輯執行計划
(2)set hive.cbo.enable=true
inner join 謂詞中 和 謂詞后 的 優化結果是一樣的,無論開啟還是關閉CBO,hive 本身都已經做了 邏輯執行計划的優化工作;
Join
(只包括left join ,right join,full join
)中的謂詞如果是保留表的,則不會下推;
Join
(只包括left join ,right join,full join
)之后的謂詞如果是Null Supplying tables
的,則不會下推。