被问麻了:Hive过滤条件写在where和on里到底有什么区别?

分析维度:过滤条件是否针对关联键、left join的情况下过滤条件针对左表还是右表、过滤条件在where中还是on中。

实践要点:

    1.当过滤条件针对左表时,条件是否针对关联键位、条件写在哪不影响最终的结果。但是当条件在where中时,会在扫描表的时候就过滤。

    2.当过滤条件针对右表时,条件是否针对针对关联键位不影响最终的结果。但是条件在on 中时,在扫表时过滤,结果的数据条数与左表一致;条件在where中时,在join后进行过滤,结果的数据会过滤掉关联后右表不满足条件的数据,会比左表数据量少。

一、针对关联键的过滤,过滤左表的条件:

图顺序:左on-右where

结论:

on           在      join时     过滤     左表

where     在     扫表时    过滤     两表

结果都一样

二、针对关联键的过滤,过滤右表的条件:

图顺序:左on-右where

结果:

on            在       扫表时       过滤    右表

where      在       join后       过滤     结果

结果不一样,

on时,数据条数与左表一致,

where时,会过滤掉右表键为null的数据

三、针对非关联键的过滤,过滤左表的条件:

图片顺序:左on-右where

结果:

on                在         join时          过滤        左表

where          在        扫表时        过滤         左表

结果都一样

四、针对非关联键的过滤,过滤右表的条件:

图片顺序:左on-右where

结论:

on              在        扫表时        过滤        右表

where        在        join后         过滤        结果

结果不一样:

on时,数据条数与左表一致。

where时,会过滤掉右表键为null的数据

补充:内连接的情况

一、只关联不过滤时,外连接与内连接的区别

结论:

外    不做任何        过滤

内    在    扫表时    过滤    两表(默认过滤关联键不为 null

二、内连接 - 过滤非关联键 

结论:

    无论是过滤左表、右表 - on 、where 的结果都一样,全都在扫表时过滤,若是左表条件则过滤左表,若是右表条件则过滤右表

三、内连接 - 过滤关联键 

结论:

    无论是过滤左表、右表- on 、where 的结果都一样,全都在扫表时过滤,过滤两表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值