共计 1143 个字符,预计需要花费 3 分钟才能阅读完成。
基本概念
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表。在数据库中,存放的只是视图的定义,而不存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。
所以要注意hive视图和hive分区表是完全不同的东西。上面也提到它是一个虚表,那么也就是说它不占用实际的存储,然而hive分区表是有对应的hadoop路径的,可以理解为是实的。
所以视图表在查询的时候是会反向去查原表的。博主昨天就栽在这,程序执行总是oom,现在是理解了,原表超级大,做聚合处理铁定oom。
视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,也可为部分行可见。
作用
首先,可以简化数据查询语句
其次,可以使用用户能从多角度看待同一数据
然后,通过引入视图可以提高数据的安全性
最后,视图提提供了一定程度的逻辑独立性等。
好处
通过引入视图机制,用户可以将注意力集中在其关心的数据上(而非全部数据),这样就大大提高了用户效率与用户满意度,而且如果这些数据来源于多个基本表结构,或者数据不仅来自于基本表结构,还有一部分数据来源于其他视图,并且搜索条件又比较复杂时,需要编写的查询语句就会比较烦琐,此时定义视图就可以使数据的查询语句变得简单可行。一句话,就是视图表只关心你想要的字段数据。
弊端
定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,故增加了数据的安全性,但不能提高查询效率。
特性与案例
Hive视图是一种无关底层存储的逻辑对象。视图中的数据是SELECT查询返回的结果。在视图选定后才会开始执行SELECT查询。
需要注意的是,视图是只读的,不能向视图中插入或是加载数据。
下面是一个创建并使用视图的例子:
create view group_by_year_vw
as
select year,count(*) as video_ct from videos group by year;
视图通常被用作将数据发布给外部客户端的抽象层。视图可以使用稳定的公开的列名和数据类型来创建。
视图可以允许在不影响下游数据消费者的情况下修改内部的表结构。
一定要理解,创建视图,是基于表来创建得到视图的。
步骤一:创建一个测试表
create table test(id int,name string);
desc test;
结果是
id int
name string
步骤二:基于表 test 创建一个 test_view 视图
CREATE VIEW test_view(
id,
name_length
)
AS SELECT id,length(name) FROM test;
步骤三:查看 test_view 视图属性
DESC test_view;
步骤四:查看视图结果
SELECT * FROM test_view;