更新時(shí)間:2023-05-31 來源:黑馬程序員 瀏覽量:
視圖是從數(shù)據(jù)庫的數(shù)據(jù)表中選取出來的數(shù)據(jù)組成的邏輯窗口,它是一個(gè)虛擬機(jī)表。引入視圖后,用戶可以將注意力集中在關(guān)心的數(shù)據(jù)上,如果數(shù)據(jù)來源于多個(gè)基本表結(jié)構(gòu),并且搜索條件比較復(fù)雜時(shí),需要編寫的查詢語句就會(huì)比較煩瑣,此時(shí)可以使用視圖將數(shù)據(jù)查詢語句變得簡單可行。
Hive中的視圖是一種無關(guān)底層存儲(chǔ)的邏輯對(duì)象,也就是說視圖中的數(shù)據(jù)并不會(huì)持久化到HDFS中。視圖中的數(shù)據(jù)是來自SELECT語句查詢的結(jié)果集,一旦視圖創(chuàng)建完成,便不能向視圖中插入或者加載數(shù)據(jù)。本節(jié)針對(duì)視圖的創(chuàng)建和查詢視圖信息進(jìn)行講解。
創(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í)無法指定列的數(shù)據(jù)類型,列的數(shù)據(jù)類型與查詢語句中數(shù)據(jù)表對(duì)應(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:用于指定查詢語句。
接下來,在虛擬機(jī)Node_03中使用Hive客戶端工具Beeline.遠(yuǎn)程連接虛擬機(jī)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,此時(shí)視圖 view_table 中只包含列 staff_name。上述命令執(zhí)行完成后,在Hive客戶端工具Beeline中執(zhí)行"DESC view_table;”命令,查看數(shù)據(jù)庫hive_database中視圖view_table的表結(jié)構(gòu)信息。
注意:若創(chuàng)建視圖時(shí),查詢語句中包含表達(dá)式,則列名稱會(huì)以_c0,_cl表示,例如查詢語句中以X+Y的方式查詢列X和列Y,則視圖中顯示這兩列數(shù)據(jù)的列名為_c0和_cl。
查詢視圖信息
查詢視圖信息的語法格式如下。
DESC [FORMATTED] view_table:
接下來,在虛擬機(jī)Node_03中使用Hive客戶端工具Beeline,遠(yuǎn)程連接虛擬機(jī)Node_02的HiveServer2服務(wù)操作Hive,查看視圖view_table的詳細(xì)結(jié)構(gòu)信息和基本結(jié)構(gòu)信息,具體命令如下。
/ * 查看視圖view_table的詳細(xì)結(jié)構(gòu)信息 * / DESC FORMATTED view_table; / * 查看視圖view_table的基本結(jié)構(gòu)信息 * / DESC view_table;
在視圖view_table的詳細(xì)結(jié)構(gòu)信息中并沒有出現(xiàn)Location參數(shù)(數(shù)據(jù)文件存放目錄),這說明視圖的數(shù)據(jù)并不會(huì)進(jìn)行實(shí)際存儲(chǔ),并且視圖view_table中列以及列的數(shù)據(jù)類型與內(nèi)部表managed_table中列
staff_name一致,說明若創(chuàng)建視圖時(shí)沒有提供列名,則通過查詢語句生成列名,生成的列名與查詢語句中數(shù)據(jù)表的列名一致。