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
where a.symbol=
'dell' and b.symbol=
'hp'
;
on子句表示了兩個表資料進行連線的條件。where子句限制了左邊表必須是dell表右邊表必須是hp表。
select a.ymd a.price b.price
from stocks a join stocks b on a.ymd<=b.ymd
where a.symbol=
'dell' and b.symbol=
'hp'
;
如上語句在hive中是違法的,主要是因為通過mapreduce很難實現這種連線,不過pig提高了乙個交叉生產的功能,所以在pig中可以實現。同時在hive中不支援在on子句中的謂詞間使用or
select a.ymd a.price b.price c.price
from stocks a join stocks b on a.ymd=b.ymd
join stocks c on a.ymd=c.ymd
where a.symbol=
'dell' and b.symbol=
'hp' and c.symbol=
'lenovo'
;
兩張以上的表採用如上形式進行連線,mapreduce job會先對錶a和表b進行連線操作,然後再啟動乙個mapreduce job將第乙個job的輸出與c連線。
1.2、join優化
連續查詢的表大小從左到右依次增加。
1.3、left outer join
左外連線操作中,join操作符左邊表中符合where子句的所有記錄會被返回。join操作符右邊表如果沒有符合on後面連線條件的記錄時,那麼右邊表指定選擇的列的值將為null,再整個過程中會先執行join,然後where再繼續過濾。
1.4、right outer join
右外連線會返回右邊表所有符合where語句的記錄,左邊表匹配不上的用null代替。
1.5、full outer join
完全外連線會返回所有表中符合where語句條件的所有記錄,如果任一指定字段沒有符合條件的值,用null代替。
1.6、left semi-join
左半開連線會返回左邊表的記錄,前提是其記錄對於右邊表滿足on的判斷條件。左半開連線是一種優化了的內連線。hive不支援右半開連線!!!
1.7、笛卡兒積連線
笛卡爾積連線表示左邊表的行數乘以右邊表的行數,如左邊表5行資料,右邊表6行資料,產生的結果就是30行資料,笛卡爾積連線會產生大量的資料,且不是併發執行,無法優化。不過在推薦系統中非常有用。
Hive查詢之Join語句
hive支援通常的sql join語句,但是只支援等值連線,不支援非等值連線。案例實操 1 根據員工表和部門表中的部門編號相等,查詢員工編號 員工名稱和部門名稱 hive default select e.empno,e.ename,d.deptno,d.dname from emp e join ...
Hive中的Join操作
hive中有許多的join操作,如果left,right和full outer join,inner join,left semi join等。那麼它們都各自有什麼特點呢?感覺很難說明這些區別,還是通過例子來看。如果我們有乙個表,資料如下 a.txt 1,a 2,b3,c 4,d7,y 8,u另乙個...
sql中的join語句
sql的join分為三種,內連線 外連線 交叉連線。以下先建2張表,插入一些資料,後續理解起來更方便一些。create table emp empno int,name char 20 depart int create table depart dpno int,dpname char 20 in...