Hive Join方式与优化

Left Semi-Join

Hive支持的Join方式有Inner Join和Outer Join,这和标准SQL一致。除此之外,还支持一种特殊的Join:Left Semi-Join。

Left Semi-Join即左半开连接,Hive使用左半开连接实现 in / exists 语法,在0.13版本推出IN/NOT IN/EXISTS/NOT EXISTS 语法后,已经不经常使用。

SELECT a.key, a.val
FROM a LEFT SEMI JOIN b ON (a.key = b.key)

它的作用是,当a表的key值,存在于(IN 、Exists)b的key值中时,返回a表的数据。

作用相当于:

SELECT a.key, a.value
FROM a WHERE a.key in (SELECT b.key FROM B);

StreamTable

Hive在执行Join时,默认会将前面的表直接加载到缓存,后面一张表进行stream处理,即shuffle操作。这样可以减少shuffle过程,因为直接加载到缓存中的表,只需要等待后面stream过来的表数据,而不需要进行shuffle,相当于整体减少了一次shuffle过程。

所以在SQL语句中,大表放在join后面,会有很好的优化效果,或者可以直接标注为StreamTable,来指定进行stream的表。

SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)

MapJoin

Hive在执行Join时,可以使用MapJoin,将小表直接加载到Map作业中,以减少Shuffle开销。其实效果与stream table一致。都是缓存小表数据的一种方式。

SELECT /*+ MAPJOIN(b) */ a.key, a.value
FROM a JOIN b ON a.key = b.key

后话

如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。

我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。

公众号自取:

公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桥路丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值