zoukankan      html  css  js  c++  java
  • 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执行顺序问题及源码分析

  • 相关阅读:
    Android之vector代码修改颜色
    一个关于native sql的程序
    webdynpro 下拉列表控件
    webdynpro tree控件使用
    webdynpro MESSGAE
    webdynpro的select_option示例
    一个简单的webdynpro的ALV示例
    ALV前导零的问题
    自动流水号
    OO的ALV隐藏工具栏的form
  • 原文地址:https://www.cnblogs.com/-courage/p/14189994.html
Copyright © 2011-2022 走看看