更新時間:2023-05-31 來源:黑馬程序員 瀏覽量:
視圖是從數(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ù)表的列名一致。