在hive sql 中,总会遇到表关联的同时还需要对左右表进行过滤数据,但是where ,on,join之间的先后顺序是怎么的呢?下面我们来一一探讨一下。
环境:hive 0.13.1版本
- 首先我们看一下t1表全表扫描的num rows 是多少:
select t1.cust_pty_no
,t2.amt
from a t1
left join b t2
on t1.cust_pty_no = t2.cust_pty_no
执行计划如下:
- 如果使用在on 条件后使用where 对t1表进行过滤,如下
select t1.cust_pty_no
,t2.amt
from a t1
left join b t2
on t1.cust_pty_no = t2.cust_pty_no and t2.busi_date='2020-04-17'
where t1.busi_date='2020-04-17'
使用expalin 查看执行计划如下:
看红色圈住部分,numrows 实际上在map阶段已经对t1表的busi_date进行过滤了
图1
对比一下这个sql
EXPLAIN
select t1.cust_pty_no,t2.amt
from a t1 where t1.busi_date=</