• sql中join的on和where操作引发的谓词下推优化


    谓词下推操作,其实Hive也陆陆续续做了一定的优化操作,但是有些地方还需要我们自己人为的去进行优化,

    1.在join操作中,针对一般的单表过滤条件,操作的时候尽量直接进行谓词下推操作(即把过滤条件直接放到子查询当中),不要把过滤条件在放到on后面的where条件中,防止查询的数据不准确性。

    2.在join操作中,涉及到在on后面进行where判断(主要涉及到双表或者多表条件判断,比如:on a.id=b.id where a.dt=>b.start_dt and a.dt<=b.end_dt),或者case when判断多表条件操作,或者select *from a where id in(select id from b)tmp等操作时。

    针对上述的几种情况来说,其实就是发生了双表(或者多表的操作判断),如果采用上述操作计算的话,则都会产生大量的map或者reduce操作,极大的影响执行效率,

    因为这种不等值连接,或者in(子查询)等,都会进行双表(或者多表)全扫描操作,不会进行谓词下推操作。

    针对上述情况,暂时的处理的方法,使用的是shell脚本传参变量,然后进行操作。当然如果数据量不大的情况下,减少脚本的复杂性等,直接使用上正常述操作就行

    start_dt=(`mysql -A dbname -hdb_host -udb_user -pdb_pwd -ss -e 'SELECT start_dt FROM b"'`) 
    select * from a where dt>='${start_dt}' ;

      参考:shell脚本引用MySQL

    谓词下推参考:

    参考:

    从一个sql引发的hive谓词下推的全面复盘及源码分析(on where执行顺序问题及源码分析

  • 相关阅读:
    迭代模型
    螺旋模型
    瀑布模型
    V模型
    codeforces411div.2
    专题1:记忆化搜索/DAG问题/基础动态规划
    Python
    字符串的相关操作方法
    Python基本数据类型
    编码
  • 原文地址:https://www.cnblogs.com/-courage/p/14189994.html
Copyright © 2020-2023  润新知