1. 程式人生 > >Hive程式設計(七)【HiveQL:檢視】

Hive程式設計(七)【HiveQL:檢視】

檢視是一個邏輯結構。不像表會儲存真實的資料。目前暫不支援物化檢視。

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 EXISTSCOMMENT。如:

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;

同樣可以使用EXTERNALLOCATION

刪除檢視的方式和刪除表方式類似

DROP VIEW IF EXISTS shipments;

使用SHOW TABLES(沒有SHOW VIEWS)語句同樣可以檢視檢視。不能使用DROP TABLES刪除檢視。

可以使用DESCRIBEDESCRIBE EXTENDED檢視檢視的元資料資訊,使用DESCRIBE EXTENDED命令的話在輸出資訊中Detailed Table Information部分tableType的值為VIRTUAL_VIEW

檢視中不能使用INSERTLOAD語句。

檢視是隻讀的,只允許修改元資料TBLPROPERTIES中的資訊。如:

ALTER VIEW shipments SET TBLPROPERTIES ('created_at' = 'some_timestamp');