full join 和full outer join_从零开始学习大数据系列(六十四)Hive的关联查询JOIN

本文深入探讨了Hive中的Join原理,包括Common Join、Map Join的运作过程,并详细讲解了不同类型的Join操作,如内关联、左外关联、右外关联和全外关联(full outer join)。通过实例展示了全外关联如何处理两个表的数据,以及在遇到null值和关联不一致情况时的结果。同时提到了Hive默认禁用笛卡尔积查询,开启非严格模式才能进行此类查询。
摘要由CSDN通过智能技术生成
[本文2400字左右,预计阅读需要15-20分钟] 在之前的文章《从零开始学习大数据系列(五十九)Hive的SELECT查询》中已经介绍了下Hive中的Select查询的基本操作。那么当我们查询的数据存放在不同的表中,关联查询就派上用场了。所谓关联查询,一般就是通过使用相同的字段值来组合多张表的字段类似于SQL中的JOIN,同时查询多张表的记录,下面我们来了解下Hive中的关联查询JOIN的操作。

Hive中Join的原理和机制

Hive中的JOIN可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join)。

Hive Common  Join 

Common join又称为reduce join或shuffle join在Reduce 阶段完成。如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会默认把执行Common Join,即在Reduce阶段完成join。整个过程包含Map、Shuffle、Reduce阶段。
  • Map阶段

读取源表的数据,Map输出时候以join on条件中的列为key,如果join有多个关联键,则以这些关联键的组合作为key;Map输出的value为join之后所关心的(select或者where中需要用到的)列,同时在value中还会包含表的tag信息,用于标明此value对应哪个表;然后按照key进行排序。
  • Shuffle 阶段

根据key的值进行hash,并将key/value按照hash值推送至不同的reduce中,这样确保两个表中相同的key位于同一个reduce中。
  • Reduce 阶段

根据key的值完成join操作,期间通过tag来识别不同表中的数据。以下面的HQL为例,图解其过程:
SELECT a.id,a.dept,b.age FROM a join b ON (a.id = b.id);

14b9b70555385e61f9b6522e9c57fcfb.png

Hive Map  Join 

Map join在Map阶段完成,没有Shuffle和Reduce阶段。Map join简单来说就是:当连接两个表一个是较小的表,一个是大表时。把较小的表放到内存中去,然后再对比较大的表进行map操作。每当扫描一个大表中的数据时,就去小表中查找是否有符合条件的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值