hive的join操作

hivejoin的三种形式

  • shuffle join:是hive中的普通的join方式,基于map/reduce实现,join的key通过shuffle汇集到相应的reduce里做join。这种join方式不考虑数据量和数据模型设计,比较耗费资源,是较慢的join策略。
  • map join,join时,将小表load到每个节点的内存中,和大表在该节点上的数据进行join,在map端完成join。其中的一个表必须为能完全加载到内存中。这种方式对大表只做单次扫描,速度较快。
  • sort-merge-bucket join(smb join):参与join的表必须都是bucket存储,而且大表的bucket数量需要是小表的2倍。这种join方式受益于相同的key预先是bucket到一起的,可以加快join的速度。但由于对表设计有太多限制,故不常用

hive的join连接

left join:

 select * from l_join a left join r_join b on (a.id=b.id) where b.id is not null;

cross join:笛卡尔积
left semi join:相当于sql的in操作,跟上on条件右表重复的记录不会出现
join:操作跟上on条件,右表重复的记录也会出现,
mapjoin:
在hive0.11,当表小于25m会默认自动启动该优化,hive.auto.convert.join=true

 select /*+mapjoin(a)*/ * from l_join a left join r_join b on (a.id=b.id);

注意
多表join是尽量把大表放在后面,因为回启动多个mapreduce,前面的结果会放到内存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值