一、窗口函数和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分区,最后导致部分值重复,部分值消失。
网友评论