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');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值