对于数仓开发来说,写好一条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
的,则不会下推。