1. 程式人生 > >Hive中join, outer join, semi join區別

Hive中join, outer join, semi join區別

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。


最常用的就是多表關聯查詢,主要講解下join、outer join和semi join的具體使用。


join是最簡單的關聯操作,兩邊關聯只取交集。


outer join分為left outer join、right outer join和full outer join。

left outer join是以左表驅動,右表不存在的key均賦值為null;

right outer join是以右表驅動,左表不存在的key均賦值為null;

full outer join全表關聯,將兩表完整的進行笛卡爾積操作,左右表均可賦值為null。


semi join最主要的使用場景就是解決exist in。

Hive不支援where子句中的子查詢,SQL常用的exist in子句在Hive中是不支援的。

SELECT a.key, a.value

FROM a

WHERE a.key in (SELECT b.key FROM B);

可以改寫為:

SELECT a.key, a.value

FROM a LEFT OUTER JOIN b ON (a.key = b.key)

WHERE b.key <> NULL;

一個更高效的實現為:

SELECT a.key, a.value

FROM a LEFT SEMI JOIN b on (a.key = b.key);


left semi join是0.5.0以上版本的特性。

相關推薦

hive與hbase外部表join時記憶體溢位(hive處理mapjoin的優化器機制)

與hbase外部表(wizad_mdm_main)進行join出現問題: CREATE TABLE wizad_mdm_dev_lmj_edition_result as select *  from  wizad_mdm_dev_lmj_20141120 as w JOI

hive的子查詢改join操作

這些子查詢在oracle和mysql等資料庫中都能執行,但是在hive中卻不支援,但是我們可以把這些查詢語句改為join操作: -- 1.子查詢 select * from

Mysql 的 case when 與HIVE case when 的漏斗模式 區別

''' ,CASE WHEN social_credit_code IS NOT NULL THEN '10-統一社會信用程式碼' WHEN organ

Hivejoin, outer join, semi join區別

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 最常用的就是多表關聯查詢,主要講解下join、outer join和semi join的具體使用。

db2與hiveleft join與left outer join區別

db2中inner join沒有左右之分,outer join有左右之分,其目的在於需要確定以誰為主表; hive中不支援left join,支援left outer join; hive中left semi join作用類似於SQL中的in,以右表中的欄位(key )進

★★★ oracle外連線,OracleLeft Outer Join和外關聯(+)的區別

【原】Oracle中Left Outer Join和外關聯(+)的區別 2008-03-23 16:22:37 Oracle的left join中on和where的區別 2009-09-28 15:20 今天遇到一個求某月所有天數的統計結果,如果某日的結果是0

簡單介紹join,outer-join,semi-join,anti-join區別

表 連線的方式如join ,semi -join ,outer-join ,anti-join ; 表連線的實現方式如nested loop,merge,hash. 本文簡單的介紹表連線的方式join ,semi -join ,outer-join ,anti-join 和 適用情景。 假設2個數據源(row

DataStagemerge、lookup、join區別與聯系

處理過程 key 占用內存 效率 功能 要求 過程 事實表 lookup 三者功能類似,都可以將表連接起來進行輸出。 區別主要體現在性能上。 lookup就是一個表在另一個表中找,處理過程都在內存進行,因此占用內存較多,一般大事實表和小緯表用這種方式關聯效率高。 merge

mysql left joinwhere和on條件的區別

行記錄 影響 知識 區別 where 相同 beijing 兩張 滿足 left join中關於where和on條件的幾個知識點: 1.多表left join是會生成一張臨時表,並返回給用戶 2.where條件是針對最後生成的這張臨時表進行過濾,過濾掉不符

SQL的JOIN語法解析(inner join, left join, right join, full outer join區別)

問題 至少 caption 左連接 右連接 class hole pty lock 總的來說,四種JOIN的使用/區別可以描述為: left join 會從左表(shop)那裏返回所有的記錄,即使在右表(sale_detail)中沒有匹配的行。 right oute

sqlin和exist語句的區別?(補充了left join和right join)

有用 表數 from 部分匹配 exist 循環 targe 從表 exists in和exists(摘錄自百度)in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。如果兩個表中一個較小,一個是大表,則子查詢表大的用

hiveleft/right join on連線and與where的使用問題

很多同學在進行表關聯的時候,and和where的使用有時候分不清,在這裡實操記錄下。 建立人員資訊表並寫入資料 create table tmp.userinfo(id string,name string,age string,dept string); insert into tmp.userinf

mysqlleft join .. and 與 where的區別

t1表: t2表: left join結果: select t1. id ,t1. name ,t2. id ,t2. name from t1 left join

Hivejoin操作

在做sql 操作的時候多表join 在所難免,下面主要介紹一下hive 中做join LEFT JOIN,RIGHT JOIN, FULL OUTER JOIN ,inner join, left semi join 準備資料 1,a 2,b 3,c 4,d 7,y 8,u 2,b

Hive 各種Join 操作及例項

目錄: 資料 建表 操作 正文: 1、資料 a: +-------+---------+--+ | a.id  | a.name  | +-------+---------+--+ | 1     | a   &

SQL語句Left join On和Where的用法區別

如果SQL用的是Left Join ,On後面的條件對Left的表沒有作用,只對Right的表有過濾作用,Where語句可以對Left的表有過濾作用 如果SQL用的是Right Join ,On後面的條件對Right的表沒有作用,只對Left的表有過濾作用,Where

hive的桶表,以及高效的join方式

hive中的join策略 大概可以分為三種 前面2種的話都是經常會用到,說下第三種 桶 join 桶(SMB) 物理上,每個桶就是表(或分割槽)目錄裡的一個檔案。 smb的設計是為了解決大表和大表之間的join的。簡單的說下她的思想:大表

Hive.LEFT SEMI JOIN子句

        公司的資料倉庫和離線資料分析是建立在Hadoop + Hive基礎上的,現在的工作主要是資料分析,自然也就跟HQL查詢經常打交道了。剛來公司幾乎完全不懂資料庫知識,神馬結構化查詢語言也只是聽說而已,不過,這沒關係,實際工作一來,學習起來還是很快~~    

SQL的交叉連線(CROSS JOIN)、內連線(INNER JOIN)、外連線(OUTER JOIN)

1、交叉連線CROSS JOIN 如果不帶條件子句,交叉連線將會返回被連線的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積; select  *from 表名 cross join  表名  on  條件表示式  2、內連線 INNER JOIN 內連線僅返回那些滿足連線條件的資料行。在內連線中,

left semi joinjoin區別

LEFT SEMI JOIN:左半開連線會返回左邊表的記錄,前提是其記錄對於右邊表滿足ON語句中的判定條件。對於常見的內連線(INNER JOIN),這是一個特殊的,優化了的情況。大多數的SQL方言會通過in.......exists結構來處理這種情況。 準備表: cre