首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大数据入门基础系列之详谈Hive的视图

在前面的博文里,我已经介绍了

:哪个版本开始Hive开始支持视图了?

:Hive0.6开始

可以先,从MySQL里的视图概念理解入手

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表。在数据库中,存放的只是视图的定义,而不存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。

视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,也可为部分行可见

Hive视图是一种无关底层存储的逻辑对象。视图中的数据是SELECT查询返回的结果。在视图选定后才会开始执行SELECT查询。

需要注意的是视图是只读的,不能向视图中插入或加载或改变数据

视图的作用有:

首先,可以简化数据查询语句;

其次,可以使用用户能从多角度看待同一数据;

然后,通过引入视图可以提高数据的安全性;

最后,视图提提供了一定程度的逻辑独立性等。

引入视图机制带来的好处:

通过引入视图机制,用户可以将注意力集中在其关心的数据上(而非全部数据),这样就大大提高了用户效率与用户满意度,而且如果这些数据来源于多个基本表结构,或者数据不仅来自于基本表结构,还有一部分数据来源于其他视图,并且搜索条件又比较复杂时,需要编写的查询语句就会比较烦琐,此时定义视图就可以使数据的查询语句变得简单可行

定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,故增加了数据的安全性,但不能提高查询效率。

例子1

  1)创建一个测试表。

Hive> create table test(idint,name string);

OK

Time taken: 0.385 seconds

Hive> desc test;

OK

id int

name string

Time taken: 0.261 seconds, Fetched: 2 row(s)

2)基于表 test创建一个 test_view视图。

Hive>createviewtest_view(id,name_length)asselect id,length(name) from test;

 3)查看 test_view视图属性。

Hive> desc test_view;

 4)查看视图结果。

Hive> select * from test_view;

更详细,请移步

mysql视图使用总结

例子2

下面是一个创建并使用视图的例子

目前版本的hive 一般都支持视图操作,但是只是支持逻辑视图,不支持物理视图,所以在hive shell下创建的视图在hive的数据仓库目录中没有,但是可以在Mysql的元数据库中看到。(这一点很重要啊!!!)

比如下hive 创建一个视图name_classnum,那如何来查找呢?

步骤1、首先确定hive使用mysql存储元数据。

步骤 2、连接mysql。

步骤3、使用hive use hive;

根据上图,可以看到TBLS表存储了 很多信息。

TBLS:存储一些table的信息;

DBS:存储数据库的信息。

TBLS: TBL_TYPE字段表示,在hive端创建的表是内部表还是外部表。

步骤4、显示tbls的详细信息

步骤5、查找视图

至此 视图查找到了。视图名称是name_classnum。

可以查看下:

可以看出 hive端的内部表是六个和一个视图。

同时在hive端可以查看:

正好匹配。

总结

这里,我让大家从基础开始了解,Hive0.6之后的版本才支持视图。没有关联存储的视图是纯粹的逻辑对象。目前Hive中不支持物化视图。当一个查询引用一个视图时,可以评估视图的定义并为下一步查询提供记录集合。这是一种概念的描述,实际上,作为查询优化的一部分,Hive可以将视图的定义与查询的定义结合起来。例如从查询到视图使用的过滤器。

视图通常被用作将数据发布给外部客户端的抽象层。视图可以使用稳定的公开的列名和数据类型来创建。

视图可以允许在不影响下游数据消费者的情况下修改内部的表结构。

一定要理解,创建视图,是基于表来创建得到视图的。

视图和索引的区别(简单地来谈谈)

视图是指计算机数据库中的视图,是一个虚拟表,即不是实实在在的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

一般情况,是多表关联查询的时候,才用视图。

对一个表来说,视图是横向的,一般创建视图查询语句都要加条件的 。

索引是作用列上面的 。

索引是为了提高查询速度的,视图是在查询sql的基础上的。

比如一个表很多字段,你查询的时候,只是想取得其中一部分字段,并且包含一些特定条件的数据 ,这个时候最好用视图。

大数据躺过的坑(九月哥)建议,学习,Hive的视图,与HBase里的视图(包括HBase的概念视图、HBase的物理视图)对比学习。

在后期的HBase系列,我会陆续深入剖析写出大数据入门基础系列之HBase里的视图(概念视图和物理视图)。敬请期待!

http://www.cnblogs.com/zlslch/http://www.cnblogs.com/lchzls/

看完本文有收获?请转发分享给更多人

关注「大数据躺过的坑」,提升大神技能

觉得不错,请点赞和留言

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171216G0Q85V00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券