Hive 常用的SQL4 視圖

簡介

Hive 中的視圖和 RDBMS 中視圖的概念一致,都是一組數據的邏輯表示,本質上就是一條 SELECT 語句的結果集。視圖是純粹的邏輯對象,沒有關聯的存儲 (Hive 3.0.0 引入的物化視圖除外),當查詢引用視圖時,Hive 可以將視圖的定義與查詢結合起來,例如將查詢中的過濾器推送到視圖中。

視圖

普通視圖:是一個虛擬表,其本身不存儲數據,數據是由查詢語句定義的。簡單來說視圖只是的定義了 數據結構的元數據。
物化視圖:是一個特殊物理表,視圖本身保存數據,其數據來源是根據原始表或者是遠程表查詢而來,並且會定時更新數據。Hive目前僅3.0及以上版本支持

hive 視圖特點

在 Hive 中可以使用 CREATE VIEW 創建視圖,如果已存在具有相同名稱的表或視圖,則會拋出異常,建議使用 IF NOT EXISTS 預做判斷。在使用視圖時候需要注意以下事項:

  1. 只有邏輯視圖,沒有物化視圖;
  2. 視圖是隻讀的,不能 Load/Insert/Update/Delete 數據;
  3. hive的視圖僅僅相當於一個sql的快捷方式,爲了提升hql語句的可讀性
  4. 視圖在創建時候,只是保存了一份元數據,當查詢視圖的時候,纔開始執行視圖對應的那些子查詢
  5. hive的視圖保存在元數據庫中 
    元數據庫保存的類型爲 VIRTUAL_VIEW
    元數據庫保存當前視圖代表的sql語句
  6. 創建視圖時,如果 SELECT 語句中包含其他表達式,例如 x + y,則列名稱將以_C0,_C1 等形式生成
  7. 創建視圖時,如果未提供列名,則將從 SELECT 語句中自動派生列名
  8. 刪除基表並不會刪除視圖,需要手動刪除視圖
  9. 在創建視圖時候視圖就已經固定,對基表的後續更改(如添加列)將不會反映在視圖
  10. 視圖可能包含 ORDER BY 和 LIMIT 子句。如果引用視圖的查詢語句也包含這類子句,其執行優先級低於視圖對應字句。例如,視圖 custom_view 指定 LIMIT 5,查詢語句爲 select * from custom_view LIMIT 10,此時結果最多返回 5 行。

創建視圖

 create view view_name as select * from carss; 
 create view carss_view as select * from carss limit 500; 

查看視圖

show tables;   // 可以查看錶,也可以查看視圖
desc view_name // 查看某個具體視圖的信息
desc carss_view

刪除視圖

drop view view_name
drop view if exists carss_view

刪除視圖時,如果被刪除的視圖被其他視圖所引用,這時候程序不會發出警告,但是引用該視圖其他視圖已經失效,需要進行重建或者刪除。

使用視圖

create view sogou_view as select * from sogou_table where rank > 3 ;
select count(distinct uid) from sogou_view;

修改視圖

ALTER VIEW [db_name.]view_name AS select_statement;

被更改的視圖必須存在,且視圖不能具有分區,如果視圖具有分區,則修改失敗。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章