数仓白菜白,早上听到了几百公里之外的某人没睡醒时发的语音,好好听。
视图是什么
视图可以允许保存一个查询并像对待表一样对这个查询进行 *** 作,这是一个逻辑结构,换一句话说,视图并不会存储数据,hive目前不支持物化视图
当一个查询引用一个视图的时候,视图所定义的查询语句会和用户的查询语句组合在一起,然后提供hive的查询计划,逻辑上讲,就是先执行视图,在执行查询语句
使用视图来降低查询复杂度
当查询变得长或者复杂的时候,可以通过视图将查询分割为多个小的,更可控的片段降低这种复杂度。举一个例子。
from ( select * from people join cart on (cart.people_id = people.id) where firstname = 'john' ) a select a.last_name where a.id = 3
- 只看from 里面的 *** 作。很明显是一个多表连接,根据people_id进行连接,并过滤firstname为john的人。
- 在多表连接的结果里面,找到id为3的人的last_name。
hive查询里面经常会有多表连接,进行嵌套,下面我们通过视图去简化一下这个嵌套子查询
create view shorter_join as select * from people join cart on cart.people_id = people.id where firstname = 'john'
现在,我们再去查询last_name where a.id = 3。此时,就可以非常的简单
select last_name from shorter_join where id = 3
使用视图限制基于条件过滤的数据
对于视图来说,最常见的场景就是基于一个列或者多个列进行限制结果,有些数据库允许将视图作为一个安全机制,也就是不给用户直接访问敏感数据原始表,而是给用户提供一个where来过滤掉重要的信息,hive目前不提供,但是我们可以通过创建视图来保护一些重要的信息不会被查询。
create table userinfo(firstname string,lastname string,ssn string,password string)
上面是一个用户信息表,我们不想让那些外部人员了解用户的敏感数据,比如账号和密码。就可以创建一个视图
create view safer_user_info as select firstname,lastname from userinfo
------------------------------------------------------------------------------------------------------------------
下面演示一下通过where子句限制数据访问的另一个例子,在这种情况下,我们希望提供一个员工表视图,只暴露某些特定的部门的员工信息
create table employee (firstname string,lastname string,ssn string, password string,department sstring);
create view techops_employee as select firstname,lastname from employee where department = 'techops'
额外小知识:
如果我们采用limit语句,限制了这个视图只能有100条记录,当我们在这个视图里面查询的时候,
select * from view limit 200
我们想查找到200条记录,是查找不到的,我们只能获得100条记录
定义一个视图并不会具体化任何数据,我们所使用的视图只是对我们要使用的表或者某些列进行一个查询语句的固化过程,比如我们通过userinfo这个表创建一个视图,如果哪一天我们把这个userinfo的某个列删除了(视图里面也有这个列),那么下次我们再次使用这个视图的时候就会报错,我们删除这个userinfo表,使用视图也会报错。
如果大家想要看一些关于动态分区的案例或者知识点。博主晚上可以写一写,高产似母猪。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)