创建/修改/删除视图:CREATE/DROP/ALTER VIEW
CREATE VIEW
创建一个视图
语法
CREATE VIEW view_name [(column_name,column_name, ...)]
AS SELECT select_statement;
说明
-
在创建视图时,指定列名和列值类型不是必须的。
-
CREATE VIEW的语法和CTAS非常相像。区别在于VIEW是非实体化的,CREATE VIEW给查询创建一个快捷方式,而CTAS将查询结果写入磁盘中。
示例
下面代码用CREATE VIEW创建了一个视图来显示user_info表中的name, reg_date和acc_level三列:
[$host]transwarp> CREATE VIEW non_secure_info
AS SELECT name, reg_date, acc_level
FROM user_info;
DROP VIEW
删除一个指定的视图
语法
DROP VIEW [IF EXISTS] view_name;
DROP VIEW将指定视图的元数据删除。虽然视图和表有很多共同之处,但是DROP TABLE不能用来删除VIEW。如果删除的视图被其他视图引用,Inceptor不会给出任何警告。依靠于被删除视图的视图会变成无效视图,但是用户需要自己处理这些变成无效的视图。
修改视图属性
用户自定义的键值对属性也用TBLPROPERTIES来定义:
语法
ALTER VIEW view_name SET TBLPROPERTIES table_properties;
table_properties:
: (property_name = property_value, property_name = property_value, ...)
用ATLER VIEW AS SELECT改变视图定义
语法
ALTER VIEW view_name AS select_statement;
ALTER VIEW AS SELECT改变指定视图的定义。在改变一个视图的定义前,该视图的定义必须已经被创建过。如果一个视图有分区,那么它不能通过ALTER VIEW AS SELECT替换。
视图的分区
语法
CREATE VIEW view_name [(column_name [COMMENT column_comment], ...) ]
PARTITIONED ON (col1, col2, ...)
AS SELECT ...
说明
-
表的分区使用PARTITIONED BY子句来指定分区键,而视图的分区使用PARTITIONED ON子句来指定分区键。这是为了区分这两种不同的分区方式。为表分区,需要在表定义之外定义分区键,表的分区键不能和列重名;为视图分区,是使用视图定义中已存在的列作为分区键,所以不需要指定分区键的数值类型。
-
和表的分区相似,PARTITIONED ON子句指定的分区键必须在视图定义(也就是SELECT语句的查询结果)的末尾,而且它们在PARTITIONED ON子句中出现的顺序必须和在视图定义中出现的顺序相同。
举例
[$host] transwarp> CREATE VIEW partition_user_info_view PARTITIONED ON (acc_level) AS SELECT * FROM user_info;
[$host] transwarp> DESCRIBE partition_user_info_view;
name string None
acc_num string None
password string None
citizen_id string None
bank_acc string None
reg_date string None
acc_level string None
# Partition Information
# col_name data_type comment
acc_level string None