hive join顺序影响的性能一例子

本文详细介绍了如何通过调整HSQL查询策略,将完成同一任务的时间从两小时缩短至五分钟。首先,我们分析了原始查询中数据量成倍增长的原因,并解释了为何采用内连接导致效率低下。接着,我们提出了使用左外连接替代内连接的优化方案,以减少不必要的数据处理。最后,通过EXPLAIN分析验证了优化效果,证实了新查询在性能上的显著提升。

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

调整前跑完需要两个小时,调整后5分钟跑完

调整前HSQL:

insert overwrite table dwd.game_cid_new partition(thisdate,ckey)
select
b.cookie_key,
b.cookie_value,
count(*) views,
a.thisdate,
b.cookie_key
from dwd.d_op_behavior_host_new a
join (select qy_id,cookie_key,cookie_value from dim.dim_cookie_mapping where ckey in ('_cid','__ysuid')) b on a.id=b.qy_id
left semi join (select host from dim.dim_op_site where cateid in (
118,
150,
151,
152,
153,
154,
155,
42710,
44904,
44934,
44935,
44938,
44940,
44941,
44942,
44943
) ) c on a.host=c.host
where a.thisdate='$thisdate'
group by 
b.cookie_key,
b.cookie_value,
a.thisdate

EXPLAIN查看执划,看到 dwd.d_op_behavior_host_new 与dim.dim_cookie_mapping先进行内连接,由于是一对多连接,数据成倍增长,帮调整为先进行left semi join过滤

调整后HSQL

insert overwrite table dwd.game_cid_new partition(thisdate,ckey)
select
b.cookie_key,
b.cookie_value,
count(*) views,
a.thisdate,
b.cookie_key
from dwd.d_op_behavior_host_new a
left semi join (select host from dim.dim_op_site where cateid in (
118,
150,
151,
152,
153,
154,
155,
42710,
44904,
44934,
44935,
44938,
44940,
44941,
44942,
44943
) ) c on a.host=c.host
join (select qy_id,cookie_key,cookie_value from dim.dim_cookie_mapping where ckey in ('_cid','__ysuid')) b on a.id=b.qy_id
where a.thisdate='$thisdate'
group by 
b.cookie_key,
b.cookie_value,
a.thisdate



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值