HIVE的6種join用法

2021-09-04 10:24:06 字數 1674 閱讀 9468

給自己留檔,基本是從這個部落格抄來的。

例子:兩個**

表a:id

name1張三

2李四3王五

表b:id

age1202

29430join

內關聯,只返回兩個表中關聯上的結果

select a.id, a.name, b.age from a join b on a.id = b.id
得到結果:

a.id

a.name

b.age1張三

202李四29

left (outer) join

左外關聯,關鍵字outer可省略。以left join關鍵字前面的表作為主表,和其他表進行關聯,返回記錄和主表的記錄數一致,關聯不上的字段置為null。

select a.id, a.name, b.age from a left

join b on a.id = b.id

得到結果:

a.id

a.name

b.age1張三

202李四293王五

null

right (outer) join

右外關聯,關鍵字outer可省略。與left join相反,以right join關鍵字後面的表作為主表,和其他表進行關聯,返回記錄和主表的記錄數一致,關聯不上的字段置為null。

select a.id, a.name, b.age from a right

join b on a.id = b.id

得到結果:

a.id

a.name

b.age1張三

202李四29

null

null

30full (outer) join

全外關聯,關鍵字outer可省略。以兩個表的記錄為基準,返回兩個表的記錄去重之和,關聯不上的字段為null。

select a.id, a.name, b.age from a full

join b on a.id = b.id

得到結果:

a.id

a.name

b.age1張三

202李四293王五

null

null

null

30left semi join

以left semi join關鍵字前面的表為主表,返回主表的key也在副表中的記錄。

select a.name, b.name from a left semi join b on a.id = b.id
得到結果:

a.id

a.name1張三

2李四cross join

笛卡爾積關聯,返回兩個表的笛卡爾積結果,不需要指定關聯鍵。

select a.id, a.name, b.age from a cross

join b

得到結果:

a.id

a.name

b.age1張三

201張三291張三

302李四202李四

292李四303王五

203王五293王五

30

Hive的三種Join方式

reduce join在hive中也叫common join或shuffle join 如果兩邊資料量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然後再去組合,如圖所示。1 大小表連線 如果一張表的資料很大,另外一張表很少 1000行 那麼我們可以將資料量少的...

Hive的三種Join方式

hive reduce join在hive中也叫common join或shuffle join 如果兩邊資料量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然後再去組合,如圖所示。1 大小表連線 如果一張表的資料很大,另外一張表很少 1000行 那麼我們可以將...

hive 四種join的區別

tablea的結構及資料 id name grade dept 1 lijie1 100.0 10 2 lijie2 90.0 20 3 lijie3 60.0 10 4 lijie4 80.0 10 5 lijie5 70.0 20 tableb的結構及資料 id name 10 it1 20 i...