hivesql优化技巧之一 mapjoin

本文介绍Hive SQL中的MapJoin优化技巧及其应用场景。MapJoin适用于连接一张小表和一张大表的情况,能有效提升查询速度并支持不等值连接操作。

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


hivesql 计算优化技巧

当要连接的两个表其中一个表非常小的时候,可以考虑使用mapjoin。mapjoin会将小表拷贝到每个运行map的节点上,并将其cache到内存中,然后在map阶段连接大表。由于省去了reduce过程,效率会提高不少。使用mapjoin之后,join会执行两个map-reduce Job,不用mapjoin则只有一个。hive.merge.mapfiles这个参数设置为true了,因为只有map而没有reduce,map的数量又不好控制,可能导致大量的map任务,这样会生成许多文件。hive.merge.mapfiles为true时,会启动另 外一个map-reduce Job来合并小文件。

 

mapjoin还有一个很大的好处是能够进行不等连接的join操作,如果将不等条件写在where中,那么mapreduce过程中会进行笛卡尔积,运行效率特别低,这是由于equality join (不等值join操作有 >、<、like等如:a.x < b.y 或者 a.x like b.y)需要在reduce端进行不等值判断,map端只能过滤掉where中等值连接时候的条件,如果使用mapjoin操作,在map的过程中就完成了不等值的join操作,效率会高很多。

 

select /*+ MAPJOIN(目标表) */

 

简单总结一下,mapjoin的使用场景:

1. 关联操作中有一张表非常小

2.不等值的链接操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值