视图是从数据库的数据表中选取出来的数据组成的逻辑窗口,它是一个虚拟机表。引入视图后,用户可以将注意力集中在关心的数据上,如果数据来源于多个基本表结构,并且搜索条件比较复杂时,需要编写的查询语句就会比较烦琐,此时可以使用视图将数据查询语句变得简单可行。
Hive中的视图是一种无关底层存储的逻辑对象,也就是说视图中的数据并不会持久化到HDFS中。视图中的数据是来自SELECT语句查询的结果集,一旦视图创建完成,便不能向视图中插入或者加载数据。本节针对视图的创建和查询视图信息进行讲解。
创建视图的语法格式如下:
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name
[(column_name [COMMENT column_comment], ...) ]
[COMMENT view_comment]
[TBLPROPERTIES (property_name = property_value, ...)]
AS SELECT...1
上述语法的具体讲解如下。
·CREATEVIEW:表示创建视图的语句,创建视图时无法指定列的数据类型,列的数据类型与查询语句中数据表对应列的数据类型一致。
·IFNOTEXISTS:可选,判断创建的视图是否存在。
·db_name:可选,用于指定创建视图的数据库。
·view_name:用于指定视图名称。
·column_name:可选,用于指定列名,若没有指定列名,则通过查询语句生成列名,生成的列名与查询语句中数据表的列名一致。
·COMMENTcolumn_comment:可选,用于指定列描述。
·COMMENT view_comment:可选,用于指定视图描述。
·TBLPROPERTIES(property_name=property_value,…):可选.用于指定视图的属性。
·AS SELECT:用于指定查询语句。
接下来,在虚拟机Node_03中使用Hive客户端工具Beeline.远程连接虚拟机Node_02的HiveServer2服务操作Hive.在数据库hive_database中创建视图view_table,具体命令如下。
CREATE VIEW IF NOT EXISTS hive_database.view_table
COMMENT "This is a view table"
AS SELECT staff_name FROM hive_database.managed_table_new;
上述命令根据查询内部表managed_table_new中列staff_name的结果集,在数据库hive_database 中创建视图 view_table,此时视图 view_table 中只包含列 staff_name。上述命令执行完成后,在Hive客户端工具Beeline中执行"DESC view_table;”命令,查看数据库hive_database中视图view_table的表结构信息。
注意:若创建视图时,查询语句中包含表达式,则列名称会以_c0,_cl表示,例如查询语句中以X+Y的方式查询列X和列Y,则视图中显示这两列数据的列名为_c0和_cl。
查询视图信息
查询视图信息的语法格式如下。
DESC [FORMATTED] view_table:
接下来,在虚拟机Node_03中使用Hive客户端工具Beeline,远程连接虚拟机Node_02的HiveServer2服务操作Hive,查看视图view_table的详细结构信息和基本结构信息,具体命令如下。
/ * 查看视图view_table的详细结构信息 * /
DESC FORMATTED view_table;
/ * 查看视图view_table的基本结构信息 * /
DESC view_table;
在视图view_table的详细结构信息中并没有出现Location参数(数据文件存放目录),这说明视图的数据并不会进行实际存储,并且视图view_table中列以及列的数据类型与内部表managed_table中列 staff_name一致,说明若创建视图时没有提供列名,则通过查询语句生成列名,生成的列名与查询语句中数据表的列名一致。