Hive中的join操作

1.Reduce Join操作

Reduce Join,也叫Common Join、Shuffle Join。Reduce操作就是在Reduce阶段完成Join操作,该操作包括一个完成的MapRedue过程,即需要经历Map阶段、Shuffle阶段、Reduce阶段。

Map阶段:该阶段输出的时候以Join On 条件中的列为key,如果Join On中涉及到多个键,则以这些关联键的组合为key。Map输出的列为Join之后所关心的键,即Select语句和Where语句中涉及到的列。为了区分value数据的来源,还需要在value中加一个Tag信息,表明数据来源。

Shuffle阶段:混洗阶段。主要是根据Map阶段产生的Key值对数据进行hash分组,将Key/Value按照hash值推动到不同的Reduce阶段。

Reduce阶段:完成Join操作。

2.Map Join操作

如果进行Join操作的两张表中有一张表比较小,完全可以直接保存在内存里,则这个时候会默认进行Map Join操作。至于表要多小才能启动Map  Join操作,可以通过hive.mapjoin.smalltable.filesize设置(一般默认为25M)。既然叫Map Join也就是说,Join操作是在Map阶段完成的,不需要Shuffle阶段和Reduce阶段。能提高Join效率并节省资源。

Map Join的工作原理就是将小表读入到内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配。

另外,Map Join可以进行不等值的连接操作。但是Map Join不适合FULL/RIGHT OUTER JOIN

3.各种join操作问题

3.1 内连接和外连接

使用外连接的一个好处就是可以将对于连接条件不成立的记录仍然包含在最后的结果中。 具体的外连接包括左外连接、右外连接和全外连接。

3.2 等值连接和不等值连接

Hive中不支持On条件上使用不等值连接,所以一般的常用做法就是讲两张表先进行笛卡尔连接然后在where子句中使用不等值条件进行筛选。

3.3 左半连接

由于左半连接只会返回左边表的记录,在其他数据库的SQL查询语句中的通常会使用IN  EXISTS结构来处理这种情况。在使用左半连接的时候,SELECT 和Where子句中不能引用到右表中的字段。另外,对于坐标中一条指定的记录,在右边表中一旦找到匹配的记录,Hive就会立即停止扫描。而其他Join操作则仍然会扫描全表。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值