7.HiveQL:视图

视图可以允许保存一个查询冰箱对待表一样对待这个查询进行操作。

这是一个逻辑结构,因为他不像一个表会存储数据。

hive 目前不支持物理化视图。

当一个查询引用一个视图时,这个视图所定义的查询语句将和用户的查询语句组合在一起供hive制定查询计划。从逻辑上将,可以想象hive先执行视图,然后使用这个结果进行余下后续的查询。

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.peoploe_id = people.id) where fistname = 'john'
	select lastname from shorter_join where id=3;

emmm 这里也没简化多少啊,可能复杂的结构中更能突显优点吧,哈哈哈。。。

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

对于视图来说一个常见的使用场景就是基于一个或多个列的值来限制输出结果,有些数据库允许将视图作为一个安全机制,也就是不给用户直接访问具有敏感数据的原始表,而是提供给用户一个通过where 子句限制了视图。

hive 目前并不支持这个功能,因为用户必须具有能够访问整个底层原始表的权限,通过视图来限制数据访问可以用来保护信息不被随意查询;

以下是通过where 子句限制数据访问的视图的另一个例子,在这种情况下,提供一个员工表视图,只暴露来自特定部门的员工信息;

create table employees(fristname string, lastname string, ssn string, password string, department string);
#视图
create view techops_employee AS
select first name,lastname,ssn from userinfo where department = ‘techops’

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

hive 支持array、map、struct 数据类型,但是这些类型破坏了第一范式,在传统数据库中并不常见应为破坏了第一范式。

hive可以将一行文本作为一个map 而非一组固定的列的能力,加上视图功能,就允许用户可以基于同一个物理表构建多个逻辑表。

在这里插入图片描述在这里插入图片描述

7.4 视图零零碎碎相关的事情

从逻辑上来说,hive 会先解析视图,然后使用解析结果来解析整个查询语句。但是作为hive 查询优化器的一部分,查询语句和视图一句会合并成一个单一的实际查询语句。

eg: 视图语句中含有一个limit 100子句,而 同时使用这个视图的查询含有一个 limit 200,那么用户最终最多只能获取100条记录结果。

定义个视图不会“具体化”任何实际数据,所以视图实际上是对其所使用到的表和列的一个查询语句固化过程。因此,如果视图所设计的表或者列不存在时,会倒是视图查询失败。

创建视图

	create view if not exists shipments(time,part)
	comment 'Time and parts for shipments.'
	talproperties('creator' = 'me')
	as select ... ;

if exitsts 和 comment 可选
一个视图要和这个视图所在的数据库下其他所有表和视图的名称不同。
用户还可以为所有的新列或部分新列新增加一个comment子句,进行写注释。
这些注释并非‘继承’原始表重的定义。

复制视图

	create table ... like... 同样适用于视图 like 后接视图名字即可。
	create table shipments2
	like shipments;

用户同样可以像以前一样选择性使用external 和location

删除视图

	drop view if exists shipments;

if exists 可选。

查看视图

	show tables (没有 show views) 可以查看视图
	不可以使用drop table 删除视图

其他

同表相同 describe 和 describe extended 可以显示视图的元数据信息。
视图不能够作为insert 或load 命令的目标表。

视图只是读的,对于视图只允许改变元数据中 tablproperties属性信息;
	alter view shipments set tblpropertoes('created_at'='some_timestamp')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值