當前位置:首頁 » 編程語言 » hivesql多表聯查
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hivesql多表聯查

發布時間: 2022-08-22 11:34:15

❶ 如何查看hivesql里執行了哪些查詢

思路

當我們在終端下執行命令「hive」後,會看到有如下輸出:

Hive有會話(Session)的概念,而這次會話中的所有日誌消息將會輸出到這個日誌文件中,包含SQL語句的執行日誌,查看這個日誌文件可以看到以下信息:

❷ hive sql里,幫我描述一個簡單的sql的原理

select a.id,a.info,b.num from a join b on a.id=b.id and where b.num>=10

兩個表做關聯,首先where會過濾掉不需要的數據。
至於表怎麼做map和rece操作,在hive里的表是虛擬的,其實還是對hdfs文件進行操作,你可以在hdfs:///user/hive/warehouse路徑下找到以表名來命名的文件,裡面就是表的內容,可以執行-cat命令查看。所以,它的map操作很簡單,就是按行讀文件,然後會根據hive的默認分隔符\001對每行進行切分。切分完成後就會按照你SQL指定的邏輯進行合並,最後再輸出成hdfs文件,只不過在hive裡面看它是以表的形式展現的。

job數會在你執行sql語句之後緊接著有相應的日誌記錄,

Total MapRece jobs = 2
Launching Job 1 out of 2
Number of rece tasks not specified. Estimated from input data size: 2
In order to change the average load for a recer (in bytes):
set hive.exec.recers.bytes.per.recer=<number>
In order to limit the maximum number of recers:
set hive.exec.recers.max=<number>
In order to set a constant number of recers:

這樣就是有兩個job,正在執行第一個job。

Hadoop job information for Stage-1: number of mappers: 5; number of recers: 2
而這個就會告訴你有多少個mapper和recer。
像你寫的這個sql有join操作,而且是hiveSQL裡面最普通的join,那麼一定會有recer參與,如果數據量很大,比如上千萬條記錄,join就會特別慢,job進度就會一直卡在rece操作。可以改成mapjoin或者sort merge bucket mapjoin。

其實hive效率不高,不適合實時查詢,即使一個表為空,用hive進行查詢也會很耗時,因為它要把sql語句翻譯成MR任務。雖然簡化了分布式編程,但是效率上就會付出代價。

你的這句sql應該會翻譯成一個JOB來執行,就是簡單地map和rece。

maprece就是按行讀文件,然後切分,合並,輸出成文件。

❸ sql語句 同時查詢兩個表

sql多表關聯查詢跟條件查詢大同小異,主要是要知道表與表之前的關系很重要;

舉例說明:(某資料庫中有3張表分別為:userinfo,dep,sex)

userinfo(用戶信息表)表中有三個欄位分別為:user_di(用戶編號),user_name(用戶姓名),user_dep(用戶部門) 。(關系說明:userinfo表中的user_dep欄位和dep表中的dep_id欄位為主外鍵關系,userinfo表中的user_sex欄位和sex表中的sex_id欄位為主外鍵關系)

❹ 求問 hadoop +hive ,怎麼通過hive的sql實現分頁查詢(分批查詢)。

簡單的辦法是按小時分區,之後一次取一小時

❺ hive sql 將兩張表連接成為第三張表

SELECT a.* FROM a JOIN b ON (a.id = b.id);
建議看看官方wiki:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

❻ hive如何同時執行多段sql

hive sql放到文件當中,之後 hive -f filename執行

❼ hive 多表插入出問題,from 後接子查詢

應該是:
from (select * from ...) a join (select * from ....) b on (a.key=b.key)

❽ 使用hive sql 連接表查詢時,會產生中間表,這些中間表這怎麼存儲

沒明白你說的,但是我想應該是這樣!
有三張表。 學生、課程、老師
s(sid、sname、sex、age) 代表 學生(學生號、姓名、性別、年齡)
c(cid、sid 、cname、grade) 課程(課程號、學生號、課程名、成績)
t(tid、tname、cid) 老師 (教師號、教師姓名、課程號)

select * from student,course,teacher
where s.sid = c.sid and c.cid = t.cid ;

三表連接就完成了。

當然還有其他方式建立三表連接。我這種方式最簡單直觀了。

希望對你有幫助!

❾ hive sql 優化的常用手段有哪些

1、join連接時的優化:當三個或多個以上的表進行join操作時,如果每個on使用相同的欄位連接時只會產生一個maprece。
2、join連接時的優化:當多個表進行查詢時,從左到右表的大小順序應該是從小到大。原因:hive在對每行記錄操作時會把其他表先緩存起來,直到掃描最後的表進行計算
3、在where字句中增加分區過濾器。
4、當可以使用left semi join 語法時不要使用inner join,前者效率更高。原因:對於左表中指定的一條記錄,一旦在右表中找到立即停止掃描。