Hive 3种map join

MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多。

common map join

参数:

set hive.auto.convert.join=true; 是否开启map join 。hive 0.10 版本后的默认值 true。

set hive.mapjoin.smalltable.filesize =25000000 ;使用map join 的最大小表大小。

set hive.auto.convert.join.noconditionaltask = true;是否合并多个map join;

set hive.auto.convert.join.noconditionaltask.size= 100000000; 将多个mapjoin合并时,所有小表文件的累计最大大小

注意 在0.7.0版本之前:需要在sql中使用 /*+ MAPJOIN(smallTable) */ 来开启mapjoin

其他不是很重要的本地任务参数

set hive.mapjoin.localtask.max.memory.usage=0.9: localtask将小表转成hashtable的最大内存使用率,默认0.9

set hive.mapjoin.check.memory.rows=100000 :localtask每处理完多少行,就执行内存检查。默认为100000

Bucket Map Join

除了map join条件外,还需要满足桶join的基本的条件:必须都是分桶表,一个表的分桶数量是另一个表的分桶数量的整倍数,关联的列必须是分桶列

set hive.optimize.bucketmapjoin = true; 开启 Bucket Map Join

SMB Map Join

额外参数

# 开启 SMB Join
set hive.auto.convert.sortmerge.join=true;
set hive.optimize.bucketmapjoin.sortedmerge = true;
set hive.auto.convert.sortmerge.join.noconditionaltask=true;
#跟上面一样开启桶Map Joinset hive.optimize.bucketmapjoin = true;
set hive.enforce.sorting=true;#强制排序
#author 炼数成器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值