hivesql中使用join 关联表时where 和 on、join 的执行先后顺序

本文探讨了在Hive 0.13.1版本中,JOIN关联表时WHERE、ON和JOIN的执行顺序对查询效率的影响。实验表明,WHERE条件对左表的过滤在MAP阶段执行,对右表的过滤应在ON条件或子查询中,以提前过滤数据,提高效率。如果过滤条件涉及分区字段,应尽量在MAP阶段完成过滤,减少资源占用。
摘要由CSDN通过智能技术生成

在hive sql 中,总会遇到表关联的同时还需要对左右表进行过滤数据,但是where ,on,join之间的先后顺序是怎么的呢?下面我们来一一探讨一下。

环境:hive 0.13.1版本

  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 

执行计划如下:
在这里插入图片描述

  1. 如果使用在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=</
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值