Hive查詢之Join語句

2021-09-20 21:45:00 字數 2316 閱讀 9043

hive支援通常的sql join語句,但是只支援等值連線,不支援非等值連線。

案例實操

(1)根據員工表和部門表中的部門編號相等,查詢員工編號、員工名稱和部門名稱;

hive (default)> select e.empno, e.ename, d.deptno, d.dname from emp e join dept d on e.deptno = d.deptno;

1.好處

(1)使用別名可以簡化查詢。

(2)使用表名字首可以提高執行效率。

2.案例實操

合併員工表和部門表

hive (default)> select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno= d.deptno;

內連線:只有進行連線的兩個表中都存在與連線條件相匹配的資料才會被保留下來。

hive (default)> select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;

左外連線:join操作符左邊表中符合where子句的所有記錄將會被返回。

hive (default)> select e.empno, e.ename, d.deptno from emp e left join dept d on e.deptno = d.deptno;

右外連線:join操作符右邊表中符合where子句的所有記錄將會被返回。

hive (default)> select e.empno, e.ename, d.deptno from emp e right join dept d on e.deptno = d.deptno;

滿外連線:將會返回所有表中符合where語句條件的所有記錄。如果任一表的指定字段沒有符合條件的值的話,那麼就使用null值替代。

hive (default)> select e.empno, e.ename, d.deptno from emp e full join dept d on e.deptno = d.deptno;

注意:連線

n個表,至少需要

n-1個連線條件。例如:連線三個表,至少需要兩個連線條件。

資料準備 location.txt

1700    beijing

1800    london

1900    tokyo

1.建立位置表

create table if not exists location(

loc int,

loc_name string

)row format delimited fields terminated by '\t';

2.匯入資料

hive (default)> load data local inpath '/opt/module/datas/location.txt' into table location;

3.多表連線查詢

hive (default)>select e.ename, d.dname, l.loc_name

from   emp e

join   dept d

on     d.deptno = e.deptno

join   location l

on     d.loc = l.loc;

大多數情況下,hive會對每對join連線物件啟動乙個mapreduce任務。本例中會首先啟動乙個mapreduce job對錶e和表d進行連線操作,然後會再啟動乙個mapreduce job將第乙個mapreduce job的輸出和表l;進行連線操作。

注意:為什麼不是表d和表l先進行連線操作呢?這是因為hive總是按照從左到右的順序執行的。

優化:當對

3個或者更多表進行

join

連線時,如果每個

on子句都使用相同的連線鍵的話,那麼只會產生乙個

mapreduce job

。1.笛卡爾集會在下面條件下產生

(1)省略連線條件

(2)連線條件無效

(3)所有表中的所有行互相連線

2.案例實操

hive (default)> select empno, dname from emp, dept;

hive join目前不支援在on子句中使用謂詞or

hive (default)> select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno

= d.deptno or e.ename=d.ename;   錯誤的

hive 9 hive高階查詢之join

join原理 join的優化 官網位址 hive支援傳統資料庫沒有的 select u.name,o.orderid from order o join user u on o.uid u.uid map join在map階段完成,沒有shuffle和reduce階段。mapjoin簡單來說就是 當...

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...

61 大資料 hive 查詢資料五 join語句

hive只支援等值連線,在連線謂詞中只能使用等號 hive不支援在on子句中的謂詞間使用or on指定連線條件,where指定過濾條件 執行順序 先執行join,再通過where語句進行過濾 hive中的join操作的關鍵字必須在on中指定,不能在where中指定,不然會先做笛卡爾積再過濾 可以在查...