美文网首页
Hive谓词下推失效的几种情况

Hive谓词下推失效的几种情况

作者: kaiker | 来源:发表于2020-09-02 16:05 被阅读0次

一、窗口函数和union一起用的时候

失效:

select
     n,
     row number() over xxx
from
     table
where
     date = xxx

union

select
    n
from
    table
where
    date = xxx

二、外连接导致下推失效

失效:

select
    x
from
    table t left outer join table2 t2 on t.id = t2.id
where
    date = xxx and t2.xx = 1

此时t2.xx不会下推,修改为

select
    x
from
    table t left outer join table2 t2 on t.id = t2.id and t2.xx = 1
where
    date = xxx

可生效

关于外连接on后条件生效的条件
1)内连接on后面的过滤条件并不会进行分区的选择
2)左外连接 on 后面的 右表过滤条件生效 左表全扫

三、Spark SQL使用rand()打join连接key值导致下推失效

non-deterministic函数会导致谓词下推失效,比如

select
     x
from
t1 join t2 on
if(t1.user_id is null, rand() * -10000, t1.user_id) = t2.user_id
where
    xxx

这会导致where后的条件失效,如果这是一个日志表,那扫描的成本会非常高

distribute by order by 后面加上这样的函数也可能导致下推失效
https://blog.csdn.net/zhouyan8603/article/details/100927907

如果spark sql执行过程中发生了fetch fail,上游map task重算,如果还存在rand值,这可能导致partition的时候,之前在a分区的指,被分到b分区,最后导致部分值重复,部分值消失。

相关文章

网友评论

      本文标题:Hive谓词下推失效的几种情况

      本文链接:https://www.haomeiwen.com/subject/enhwsktx.html