在SQL里,有很多子句都可以带有表达式,比如
其中SELECT子句中,GROUP BY子句中, WHERE子句中都带有表达式。...SQL语法本身就是一个递归的结构,支持在FROM之后写一个子查询,如:
面对这样的语句,我们只要先去生成子查询的逻辑查询计划,将子查询的的结果虚表作为父查询的输入即可,在逻辑上很方便去应对。...主要包含三个优化:
常量表达式的计算举个例子: SELECT 1+2 FROM POKES
“ 1+2 “就是一个常量表达式,此时,我们可以将1+2的结果先计算出来,然后将结果放入查询计划,避免在执行时...左面的是未优化前的查询计划,在FIL_4中计算了A.AGE>10 AND B.AGE>5这个表达式,右面的是优化后的查询计划,将A.AGE>10放入了FIL_7计算并且提前,将B.AGE>5放入了FIL...我们会分析用户写在WHERE子句中的分区字段,将分区字段的条件拿出来,再去metastore中读取所有的分区信息,用WHERE子句中的条件做过滤,最后,我们就知道哪些分区是需要读取的了,我们把要读取的分区信息放入对应的