Hive中的Sort Merge Bucket Join

Hive中的Sort Merge Bucket Join(SMB Join)是一种优化小表与大表连接的方法,当小表数据量过大无法使用map join时,SMB Join通过分桶和排序加速join过程。要使用SMB Join,需确保所有表按相同列分桶且数据有序。创建分桶表时,可使用`BUCKETED BY`指定列和桶数。在执行前,需设置正确的reducer数,以保证每个mapper能正确处理对应bucket的数据,从而提高效率。
摘要由CSDN通过智能技术生成

最近学习时发现 Hive 中还有一种 SMB Join,即 Sort Merge Bucket Join ,赶紧找资料学习了一波。。

map join

我们知道在 Hive 中当小表 join 大表时可以通过 map join 将小表中的数据读入内存,在 map 端 join 大表,从而省略 reduce 过程,大大加快连接的速度,但是当小表数据量过大内存放不下时就无法使用 map join 了,由此引出了 Sort Merge Bucket Join。

SMB join

要使用 SMB Join,所有的表都必须按相同的列进行分桶并使用相同的桶数(或一个表桶数是另一个表桶数的倍数)且保证数据有序。这样才能确保 hash 值相同的 key 被分到同一个桶中,SMB join 的结果才是有效的。可以在建表时通过使用 CLUSTERED BY user_id INTO 256 BUCKETS 来对某一列进行分桶并指定桶数。

分桶后在插入时需要:

set hive.enforce.bucketing=true

强制 hive 为目标分桶表设置正确的reducer数,如果不指定,需要自己设置正确的reducer数:</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值