Hive程式設計(七)【HiveQL:檢視】
阿新 • • 發佈:2019-02-17
檢視是一個邏輯結構。不像表會儲存真實的資料。目前暫不支援物化檢視。
7.1 使用檢視來降低查詢複雜度
假若有如下的巢狀子查詢:
FROM (
SELECT * FROM people JOIN cart
ON (cart.people_id=people.id) WHERE firstname='john'
) a SELECT a.lastname WHERE a.id=3;
建立檢視
CREATE VIEW shorter_join AS SELECT * FROM people JOIN cart ON (cart.people_id=people.id) WHERE firstname='john';
像使用表一樣使用檢視來查詢.
SELECT lastname FROM shorter_join WHERE id=3;
7.2 使用檢視來限制基於條件過濾的資料
hive> CREATE TABLE userinfo (
> firstname string, lastname string, ssn string, password string);
hive> CREATE VIEW safer_user_info AS
> SELECT firstname,lastname FROM userinfo;
hive> CREATE TABLE employee (firstname string, lastname string, > ssn string, password string, department string); hive> CREATE VIEW techops_employee AS > SELECT firstname,lastname,ssn FROM userinfo WERE department='techops';
7.3 動態分割槽中的檢視和map型別
CREATE EXTERNAL TABLE dynamictable(cols map<string,string>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\004'
COLLECTION ITEMS TERMINATED BY '\001'
MAP KEYS TERMINATED BY '\002'
STORED AS TEXTFILE;
CREATE VIEW orders(state, city, part) AS SELECT cols["state"], cols["city"], cols["part"] FROM dynamictable WHERE cols["type"] = "request";
CREATE VIEW shipments(time, part) AS
SELECT cols["time"], cols["parts"]
FROM dynamictable
WHERE cols["type"] = "response";
7.4 檢視零零碎碎相關的事情
建立檢視時可以使用IF NOT EXISTS
和COMMENT
。如:
CREATE VIEW IF NOT EXISTS shipments(time, part)
COMMENT 'Time and parts for shipments.'
TBLPROPERTIES ('creator' = 'me')
AS SELECT ...;
檢視的名稱不能和表的名稱重名。可以為檢視中的新列使用COMMENT
寫註釋,與原表中的列的註釋不同。
在AS SELECT
語句中若沒有指定別名預設Hive將使用_CN
作為別名。其中N
從0開始。在AS SELECT
語句之前可以使用TBLPROPERTIES
定義表的屬性。
CREATE TABLE … LIKE
結構同樣適用於複製檢視。只需要在LIKE
關鍵字後面跟檢視名即可。如:
CREATE TABLE clone_shipments
LIKE shipments;
同樣可以使用EXTERNAL
和LOCATION
。
刪除檢視的方式和刪除表方式類似
DROP VIEW IF EXISTS shipments;
使用SHOW TABLES(沒有SHOW VIEWS)
語句同樣可以檢視檢視。不能使用DROP TABLES
刪除檢視。
可以使用DESCRIBE
或DESCRIBE EXTENDED
檢視檢視的元資料資訊,使用DESCRIBE EXTENDED
命令的話在輸出資訊中Detailed Table Information
部分tableType
的值為VIRTUAL_VIEW
。
檢視中不能使用INSERT
或LOAD
語句。
檢視是隻讀的,只允許修改元資料TBLPROPERTIES
中的資訊。如:
ALTER VIEW shipments SET TBLPROPERTIES ('created_at' = 'some_timestamp');