Hive8 视图

Hive8 视图

更多整理都在我的github上:Auraros欢迎大家。

试图可以允许保存一个查询并对待表一样对这个查询进行操作。这是一个逻辑结构,因为它不像一个表会存储数据。

使用视图来降低查询复杂度

背景:当查询时间变得长或复杂的时候,通过使用视图将这个查询语句分割成多个小的,可控的片段可以降低这种复杂度。

  • 具有嵌套子查询的查询

    FROM(
    	SELECT * FROM people JOIN cart
    		ON (cart.prople_id=people.id) WHERE firstname = 'john'
    	)a SELECT a.lastname WHERE a.id=3;
    
  • 嵌套子查询变成了 视图

    CREATE VIEW shorter_join AS
    SELECT * FROM prople JOIN cart
    ON (cart.people_id=people.id) WHERE firstname='john'
    

    操作这个视图

    SELECT lastname FROM shorter_join WHERE id=3;
    

使用视图来限制基于条件过滤的数据

背景:视图最常见的使用场景就是基于一个或多个列的值来限制输出结果。通过创建视图来限制数据访问可以用来保护信息不被随意查询

hive> CREATE TABLE userinfo(
	> firstname string, lastname string, ssn string, password string);
hive> CREATE VIEW safer_user_info AS
	> SELECT firstname, lastname, FROM userinfo;
  • 通过WHERE子句限制数据访问的视图的另一个例子,这种情况下,我们提供一个员工表视图,只暴露来自特定部门的员工信息。
hive> CREATE TABLE emplyee (firstname string, lastname string,
	> ssn string, password string, department string);
hive> CREATE VIEW techops_emplyee AS
	> SELECT firstname, lastname, ssn FROM userinfo WHERE department='techops';

动态分区中的视图和map类型

查看实例文件,这里文件使用^A 作为集合内元素间的分隔符, 使用^B作为map中键和值之间的分隔符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sn58qZZL-1602505826040)(C:\Users\Auraros\AppData\Roaming\Typora\typora-user-images\image-20201011152211905.png)]

下面我们来创建表:

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;

上面的例子中,每行只有一个字段,因此FIELDS TERMINATED BY 语句所指定的分隔符其实并没有什么影响。

现在可以创建一个这样的视图,其仅取出type值等于request的city、state和part 3个字段,并将视图命名为orders。视图orders具有3个字段:state、city和part.

CREATE VIEW order(state, city, part) AS
SELECT cols["state"], cols["city"], cols["part"]
FROM dynamictable
WHERE cols["type"] = "request";

创建的第二个视图名为shipments,这个视图返回time和part 2个字段

CREATE VIEW shipments(time, part) AS 
SELECT cols["time"], cols["parts"]
FROM dynamictable
WHERE cols["type"] == "response";

视图零零碎碎相关的东西

Hive会先解析视图,然后使用解析结果来解析整个查询语句,作为Hive查询优化器的一部分,查询语句和视图语句可能会合并成一个单一的实际查询语句。

  • 复制视图
CREATE TABLE shipments2 
LIKE shipments;
  • 删除视图
DROP VIEW IF EXISTS shipments;
  • 查看视图
DESCRIBE 和 DESCRIBE EXTENDED 都可以显示
  • 只允许改变元数据中TBLPROPERTIES
ALTER VIEW shipments SET TBLPROPERTIES('created_at' = 'some_timestamp');

- 只允许改变元数据中TBLPROPERTIES

ALTER VIEW shipments SET TBLPROPERTIES(‘created_at’ = ‘some_timestamp’);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值