【Hive】Hive Join 介绍

本文介绍了Hive的Join操作,包括INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、LEFT SEMI JOIN和笛卡尔积。详细讨论了Join的实现原理,如Common Join和Map Join,并探讨了Join优化策略,如BUCKET MAP JOIN和SORT MERGE BUCKET MAP JOIN,以及在倾斜表中的优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Join

Hive 中的 Join 只支持等值 Join,也就是说 Join on 中的 on 里面表之间连接条件只能是 = ,不能是 <,> 等符号。此外,on中的等值连接之间只能是 and,不能是or。

Hive 执行引擎会将 HQL “翻译” 成为map-reduce 任务,在执行表的 Join 操作时,如果多个表中每个表都使用同一个列进行连接(出现在 Join on 子句中),则只会生成一个 MR Job:

SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)

三个表 a、b、c 都分别使用了同一个字段进行连接,亦即同一个字段同时出现在两个 Join 子句中,从而只生成一个 MR Job。

如果多表中,其中存在一个表使用了至少 2 个字段进行连接(同一个表的至少2个列出现在 Join 子句中),则会至少生成 2 个MR Job:

SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2)

三个表基于 2 个字段进行连接,这两个字段 b.key1 和 b.key2 同时出现在 b 表中。连接的过程是这样的:首先 a 和 b 表基于a.key 和 b.key1 进行连接,对应着第一个 MR Job;表 a 和 b 连接的结果,再和 c 进行连接,对应着第二个 MR Job。

这是因为 Map 输出时候以 Join on 条件中的列为 key,如果 Join 有多个关联键,则以这些关联键的组合作为 key,Map 根据 Key 分发数据给 Reduce 端,具体的 Join 是在 Reduce 操作中完成,因此,如果多表基于不同的列做 Join,则无法在一轮 MR 任务中将所有相关数据 shuffle 到同一个 Reduce 操作中。

二、Join 类型

Hive 支持常用的 SQL Join 语句,例如内连接、左外连接、右外连接以及 Hive 独有的 map 端连接。其中 map 端连接是用于优化 Hive 连接查询的一个重要技巧。

先准备三张表。

employee员工表:

create table if not exists employee(
user_id int,
username string,
dept_id int)
row format delimited 
fields terminated by ' '  
lines terminated by '\n';

dept部门表:

create table if not exists dept(
dept_id int</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值