轻松玩转hive中join“六大神兽”之间的关系

各种join之间的关系:

Hive编程是整个数据仓库操作的核心,而各个业务之间的join是Hive的核心,因此可以理解,掌握Hive中的各种join对于数据仓库开发工程师来说是必不可少的技能。

注意:

hive中的join仅支持等值join,也就是说,join on 中的on里边表之间的连接条件只能是=,不能是等符号。此外,on中的等值连接之间只能是and,不能是or. (如果在on 里添加非表之间的条件可以是非等号)

1.inner join(内连接)

内连接,将保留仅两个连接的表中存在符合连接条件的数据,并返回两个表中都有的信息

内部连接是最常见的连接类型,它是称为普通连接,而E.FCodd最初称为自然连接。

inner可以省略。

inner join==join等效于较早的连接语法

通俗理解:返回两张表中都有的信息;

2.left join(左外连接)

左外连接(Left Outer Join),其中outer也可以省略,left outer join是一个早期措词。

A list join B 是基于表A的记录为基础。A可以看作是左表,B可以看作是右表,而list join则基于左表。

这意味着将全部显示左侧表(A)中的记录(无论右侧表中是否有与它们匹配的行),而右侧表(B)仅显示符合搜索条件的记录,例如符合on,where条件。

表B中缺少记录的内容为NULL。

A list join B等效于B right join A

通俗理解:以前面的表作为主表和其他表进行关联,返回的记录数和主表的记录数相同,关联不上的字段用NULL;

3.right join(右外连接)

同理和left join相反,A right join B,则会显示表B中的所有记录,A表不足以填充null

同样,right outer join =righr join ,outer也可以省略。

通俗理解:以后面的表为主表,和前面的表做关联,返回的记录数和主表一致,关联不上的字段为NULL;

4.full outer join(全外连接)

等效于full join,全外连接[也称为全关联]

包含左表和右表的所有行,无论在另一侧的表中是否存在与它们匹配的行

在功能上,它等效于两个数据集的左外连接和右外连接,然后再消除重复行的并行操作将以上两个结果集合并为一个结果集。

不关联的字段为NULL;

注意:Hive不会使用mapjoin来优化full join ;

通俗理解:返回两个表记录的并集,关联不上的字段为NULL;

5.left half join(左半开连接)

左半开连接,将显示左半边表中记录,前提是对右半边表的记录满足on语句中的判断条件。

left semi join 的效果类似于inner join 的效果,并且比inner join 更高效。

通俗的理解:关键字前面的表是主表,两个表与on条件字段做交集,并返回前面表中的记录

6.cross join(笛卡尔积关联)

返回两个表的笛卡尔积结果,无需指定关联键;这似乎与inner join相同,

在SQL标准中定义的是cross join,cross join就是无条件的inner join。

在mysql中,没有区别,这两者是等效的。

通俗理解:返回两个表的笛卡尔积结果,不需要指定关联键;

如果觉得对你有所帮助。记得收藏和关注呦!(每日更新各种大数据框架)

如需转载请注明出处(创作不易请见谅)

和巨婴程序猿一起成长。让自己变得更优秀

想了解更多精彩内容,快来关注跟着巨婴去逆袭

我最近一直在思考(大数据通俗讲解)的问题,你的看法是什么呢?关注我快说出来一起交流一下吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200630A0BFDF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券