首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hive Join方式与优化

Hive Join方式与优化

作者头像
十里桃花舞丶
发布2021-01-06 11:07:32
发布2021-01-06 11:07:32
1.1K0
举报
文章被收录于专栏:桥路_大数据桥路_大数据

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 语法后,已经不经常使用。

代码语言:javascript
复制
SELECT a.key, a.val
FROM a LEFT SEMI JOIN b ON (a.key = b.key)

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

作用相当于:

代码语言:javascript
复制
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的表。

代码语言:javascript
复制
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一致。都是缓存小表数据的一种方式。

代码语言:javascript
复制
SELECT /*+ MAPJOIN(b) */ a.key, a.value
FROM a JOIN b ON a.key = b.key

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Left Semi-Join
    • StreamTable
    • MapJoin
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档