搜索
您的当前位置:首页正文

hive谓词下推-第一版

来源:榕意旅游网

什么是谓词下推?
Predicate pushdown 将外层查询块的WHERE子句中的谓词移入较低层查询块,从而能够提早进行数据过滤,即在不影响结果的情况下,尽量将过滤条件提前执行。
为什么要进行谓词下推?
谓词下推可以使得程序提前过滤部分数据,降低Join等一系列操作的数据量级,尽可能避免程序性能问题。
谓词下推优化方式

  • 词法分析类似文本分词
  • 词法分析及语义分析会检查Database及table是否存在,group结合聚合函数等一些基础语法是否正确
  • 逻辑计划阶段会有很多优化,对谓词的处理在这个阶段完成
  • 对于Spark-Sql,物理计划是RDD的DAG图的生成过程;对于Hive-sql,物理计划是Hive Stage的生成过程。

谓词下推的第一层含义:

  • 由Sql层的Filter操作符来完成过滤,然后进行全表Scan
  • 由Scan全表,然后再进行过滤

谓词下推的第二层含义:谓词下推在join中的应用

内连接

  • where条件中,不含or操作符,MR&spark都会进行谓词下推
  • on条件中,MR&spark都会进行谓词下推
  • where中,含or操作符,过滤条件与join主键一致,spark会进行谓词下推,MR不会进行谓词下推
  • where中,含or操作符,过滤条件与join主键一致,spark&MR均不会谓词下推

LEFT JOIN&RIGHT JOIN

  • left join过滤条件在on中,MR&Spark过滤字段取左表不下推,右表下推
  • left join过滤条件在where中,且为and关系,过滤字段为关联主键MR&Spark均会进行谓词下推
  • left join过滤条件在where中,且为and关系,过滤字段非关联主键取自左表都下推;引擎为MR,右表不下退;引擎为Spark右表,下推;
  • left join过滤条件在where中,且为or关系,MR&Spark均不会进行谓词下推
  • right join反之

因篇幅问题不能全部显示,请点此查看更多更全内容

Top