使用嵌套子查询优化hive多连接查询

本文探讨了在大数据量下,通过优化SQL查询结构,特别是将where条件移至子查询中,以提升hive表关联查询的效率。以三个示例表为例,展示了如何调整left join条件以改善性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在工作中,常用到left join来关联其他hive表进行查询,并且每个表都有相应的where条件。

在数据量大的情况下,不同连接条件所在的位置对查询效率的影响还是很大的。下面举一些例子:

现在有三个表,它们分别是:

表一:user_info

字段名   类型     备注 
imei   bigint  
type   string     
date   string   分区列
表二:age_info

字段名	类型	备注
id	   bigint  	
age	   int  	
day	   string	分区列
表三:sex_info

字段名	类型	备注
id	   bigint  	
sex	   int  	
day	   string	分区列

以下sql代码:

select 
t1.imei,
t1.type,
t2.age,
t3.sex
from user_info t1
left join age_info t2 on t1.imei = t2.id
left join sex_info t3 on t1.imei = t3.id
where t1.date = '2019-02-20'
and t2.day = '2019-02-20'
and t3.day = '2019-02-20'

优化sql,将where条件放到子查询中,查询效率将会提高很多。

select 
t1.imei,
t1.type,
t2.age,
t3.sex
from 
(select imei,type from user_info where date='2019-02-20') t1 
left join (select age from age_info where day='2019-02-20') t2 on t1.imei = t2.id
left join (select sex from sex_info where day='2019-02-20') t3 on t1.imei = t3.id

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值