您的位置:首页 > 编程语言

Hive编程(七)【HiveQL:视图】

2017-12-01 12:02 148 查看
视图是一个逻辑结构。不像表会存储真实的数据。目前暂不支持物化视图。

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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: