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

2021-09-25 07:12:34 字數 1997 閱讀 7403

hive只支援等值連線,在連線謂詞中只能使用等號

hive不支援在on子句中的謂詞間使用or

on指定連線條件,where指定過濾條件

執行順序:先執行join,再通過where語句進行過濾

hive中的join操作的關鍵字必須在on中指定,不能在where中指定,不然會先做笛卡爾積再過濾

可以在查詢前使用 explain 關鍵字來檢視hive將為每個查詢使用多少個mapreduce作業

explain輸出中有很多查詢執行計畫的詳細資訊,包括抽象語法樹、hive執行各階段之間的依賴圖和每個階段的資訊。乙個階段可能是像mapreduce作業檔案一點這樣乙個操作

如果要查詢更詳細的資訊,在查詢前使用 explain extended

jon子句中表的順序很重要,一般最好把最大的表放在最後

保證連續查詢中的表大小是從左到右依次增加的

hive使用基於規則的查詢優化器來確定查詢是如何執行的,但在hive 0.14.0開始,hive也可以使用基於代價的優化器

1、內連線

1> inner join

2> 自連線

select * from student t1 join student t2 on t1.id=t2.id

select * from student t1 join student t2 on t1.id=t2.id where t1.id in (95002,95002);

select * from student t1 join student t2 on t1.id=t2.id and t1.id in (95002,95002);

多張表連線:

select * from student t1

join student t2 on t1.id=t2.id

join student t3 on t1.id=t3.id

where t1.id in (95002,95017);

多數情況下,hive對每隊join連線物件啟動乙個mapreduce任務,本例中,先啟動乙個mapreduce job對錶t1和t2進行連線操作,後啟動乙個mapreduce job將第乙個job的輸出和表c進行連線操作

hive總是按照從左向右執行

當對3個或多個表進行join時,如果每個on子句都使用相同的連線鍵,那麼只會產生乙個mapreduce

2、外連線

1> left outer join

left join以前面的表作為主表和其他表進行關聯,返回的記錄數和主表的記錄數相同,關聯不上的字段用null

2> right outer join

right join與left相反,以後面的表為主表,和前面的表做關聯,返回的記錄數和主表一致,關聯不上的字段為null

3> full outer join

full join為全關聯,返回兩個表記錄的並集,關聯不上的字段為null

full join時,hive不會用mapjoin來優化

3、半連線 left semi join

left semi join以關鍵字前面的表為主表,兩個表對on的條件欄位做交集,返回前面表的記錄

hive不支援右半開連線

semi join比inner join更高效,原因:對於左邊表中一條指定的記錄,右邊表中一旦找到匹配的記錄,hive會立即停止掃瞄

4、笛卡爾積連線

hive可以在map端執行連線操作,因為hive可以和記憶體中的小表進行逐一匹配,從而忽略常規連線操作所需要的reduce過程。即使很小的資料集,這個優化也明顯地要快於常規的連線操作。不僅減少了reduce過程,還可以減少map過程的執行步驟

在hive v0.7之前,標記 /+ mapjoin(d)/ 進行觸發

hive v0.7版本開始,設定屬性hive.auto.convert.join 才能啟動這個優化,預設這個屬性是false,

設定能夠使用這個優化的大小,這個屬性的預設值(單位是位元組):hive.mapjoin.smalltable.filesize=25000000

大資料之Hive《五》

1 語法hive load data local inpath opt module datas student.txt overwrite into table student partition partcol1 val1,1 load data 表示載入資料 2 local 表示從本地載入資料...

1 大資料 hive概述

1 hive是乙個構建在hadoop上的資料倉儲框架 2 乙個hive的二進位製包可以在多個版本的hadoop上工作 3 hive使用環境變數 hadoop home來指定hadoop的所有相關jar包和配置檔案 4 把sql查詢轉換為一系列在hadoop集群上執行的作業。hive的本質是將sql語...

8 大資料 hive資料模型

1 database 在hdfs中表現為 目錄下乙個資料夾 2 table 在hdfs中表現所屬database目錄下乙個資料夾 3 temporary table 臨時分析,關閉hive客戶端後,臨時表就會消失。主要用於儲存不重要中間結果集,不重要的表。臨時表不會建立hdfs資料夾 create ...