首頁技術(shù)文章正文

Hive中怎樣創(chuàng)建和查詢視圖信息?

更新時間:2023-05-31 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

視圖是從數(shù)據(jù)庫的數(shù)據(jù)表中選取出來的數(shù)據(jù)組成的邏輯窗口,它是一個虛擬機表。引入視圖后,用戶可以將注意力集中在關(guān)心的數(shù)據(jù)上,如果數(shù)據(jù)來源于多個基本表結(jié)構(gòu),并且搜索條件比較復(fù)雜時,需要編寫的查詢語句就會比較煩瑣,此時可以使用視圖將數(shù)據(jù)查詢語句變得簡單可行。

Hive中的視圖是一種無關(guān)底層存儲的邏輯對象,也就是說視圖中的數(shù)據(jù)并不會持久化到HDFS中。視圖中的數(shù)據(jù)是來自SELECT語句查詢的結(jié)果集,一旦視圖創(chuàng)建完成,便不能向視圖中插入或者加載數(shù)據(jù)。本節(jié)針對視圖的創(chuàng)建和查詢視圖信息進行講解。

創(chuàng)建視圖的語法格式如下:

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name
[(column_name [COMMENT column_comment], ...) ]
  [COMMENT view_comment]
  [TBLPROPERTIES (property_name = property_value, ...)]
AS SELECT...1

上述語法的具體講解如下。

·CREATEVIEW:表示創(chuàng)建視圖的語句,創(chuàng)建視圖時無法指定列的數(shù)據(jù)類型,列的數(shù)據(jù)類型與查詢語句中數(shù)據(jù)表對應(yīng)列的數(shù)據(jù)類型一致。

·IFNOTEXISTS:可選,判斷創(chuàng)建的視圖是否存在。

·db_name:可選,用于指定創(chuàng)建視圖的數(shù)據(jù)庫。

·view_name:用于指定視圖名稱。

·column_name:可選,用于指定列名,若沒有指定列名,則通過查詢語句生成列名,生成的列名與查詢語句中數(shù)據(jù)表的列名一致。

·COMMENTcolumn_comment:可選,用于指定列描述。

·COMMENT view_comment:可選,用于指定視圖描述。

·TBLPROPERTIES(property_name=property_value,…):可選.用于指定視圖的屬性。

·AS SELECT:用于指定查詢語句。

接下來,在虛擬機Node_03中使用Hive客戶端工具Beeline.遠程連接虛擬機Node_02的HiveServer2服務(wù)操作Hive.在數(shù)據(jù)庫hive_database中創(chuàng)建視圖view_table,具體命令如下。

CREATE VIEW IF NOT EXISTS hive_database.view_table
 COMMENT "This is a view table"
AS SELECT staff_name FROM hive_database.managed_table_new;

上述命令根據(jù)查詢內(nèi)部表managed_table_new中列staff_name的結(jié)果集,在數(shù)據(jù)庫hive_database 中創(chuàng)建視圖 view_table,此時視圖 view_table 中只包含列 staff_name。上述命令執(zhí)行完成后,在Hive客戶端工具Beeline中執(zhí)行"DESC view_table;”命令,查看數(shù)據(jù)庫hive_database中視圖view_table的表結(jié)構(gòu)信息。

注意:若創(chuàng)建視圖時,查詢語句中包含表達式,則列名稱會以_c0,_cl表示,例如查詢語句中以X+Y的方式查詢列X和列Y,則視圖中顯示這兩列數(shù)據(jù)的列名為_c0和_cl。

查詢視圖信息

查詢視圖信息的語法格式如下。

DESC [FORMATTED] view_table:

接下來,在虛擬機Node_03中使用Hive客戶端工具Beeline,遠程連接虛擬機Node_02的HiveServer2服務(wù)操作Hive,查看視圖view_table的詳細結(jié)構(gòu)信息和基本結(jié)構(gòu)信息,具體命令如下。

/ * 查看視圖view_table的詳細結(jié)構(gòu)信息 * /
DESC FORMATTED view_table;
/ * 查看視圖view_table的基本結(jié)構(gòu)信息 * /
DESC view_table;

查看視圖
在視圖view_table的詳細結(jié)構(gòu)信息中并沒有出現(xiàn)Location參數(shù)(數(shù)據(jù)文件存放目錄),這說明視圖的數(shù)據(jù)并不會進行實際存儲,并且視圖view_table中列以及列的數(shù)據(jù)類型與內(nèi)部表managed_table中列 staff_name一致,說明若創(chuàng)建視圖時沒有提供列名,則通過查詢語句生成列名,生成的列名與查詢語句中數(shù)據(jù)表的列名一致。


分享到:
在線咨詢 我要報名
和我們在線交談!