hive中有許多的join操作,如果left,right和full outer join,inner join,left semi join等。那麼它們都各自有什麼特點呢?
感覺很難說明這些區別,還是通過例子來看。
如果我們有乙個表,資料如下:
a.txt
1,a
2,b3,c
4,d7,y
8,u
另乙個表中的資料如下:
b.txt
2,bb
3,cc
7,yy
9,pp
在hive中建表:
create table a(id int,name string)
row format delimited fields terminated by ',';
create table b(id int,name string)
row format delimited fields terminated by ',';
匯入資料:
load data local inpath '/root/a.txt' into table a;
load data local inpath '/root/b.txt' into table b;
select * from a inner join b on(a.id=b.id);
輸出如下:
2 b 2 bb
3 c 3 cc
7 y 7 yy
就是求交集。
select * from a left outer join b on(a.id=b.id);
輸出結果如下:
1 a null null
2 b 2 bb
3 c 3 cc
4 d null null
7 y 7 yy
8 u null null
把左邊的表的記錄都列印出來。
select * from a right outer join b on(a.id=b.id);
輸出如下:
2 b 2 bb
3 c 3 cc
7 y 7 yy
null null 9 pp
把右邊的表的記錄都列印出來。
select * from a full outer join b on(a.id=b.id);
輸出結果如下:
1 a null null
2 b 2 bb
3 c 3 cc
4 d null null
7 y 7 yy
8 u null null
null null 9 pp
兩邊的記錄都會出來,如果沒有的就填null。
select * from a left semi join b on(a.id=b.id);
輸出結果如下:
2 b
3 c
7 y
semi在hive中用的很廣泛,用於實現exist in 子查詢的。left semi join相當於inner join中取一半。 HIVE中的join語句
hive支援通常的sql join語句,但是只支援等值連線。1.1 inner join 只有進行連線的兩個表都存在與連線標準相匹配的資料才會儲存下來 select a.ymd a.price b.price from stocks a join stocks b on a.ymd b.ymd wh...
Hive中Join的原理和機制
籠統的說,hive中的join可分為common join reduce階段完成join 和map join map階段完成join 本文簡單介紹一下兩種join的原理和機制。1 hive common join 如果不指定mapjoin或者不符合mapjoin的條件,那麼hive解析器會將join...
Hive中Join的原理和機制
籠統的說,hive中的join可分為common join reduce階段完成join 和map join map階段完成join 本文簡單介紹一下兩種join的原理和機制。如果不指定mapjoin或者不符合mapjoin的條件,那麼hive解析器會將join操作轉換成common join,即 ...