ALTER VIEW
描述
ALTER VIEW
语句可以更改与视图相关的元数据。它可以更改视图的定义,将视图名称改为其他名称,通过设置 TBLPROPERTIES
来设置或取消视图的元数据。
重命名视图
重命名现有视图。如果新视图名称已存在于源数据库中,则会抛出 “TableAlreadyExistsException”。此操作不支持跨数据库移动视图。
如果视图已被缓存,该命令会清除视图及其所有引用视图的隶属对象的缓存数据。当下次访问视图时,视图的缓存将被慢慢填满。该命令将保留未缓存的视图依赖项。
语法
ALTER VIEW view_identifier RENAME TO view_identifier
参数
view_identifier
指定视图名称,可选择使用数据库名称限定。
语法:
[ database_name. ] view_name
设置视图属性
设置现有视图的一个或多个属性。属性应是键值对。
如果属性的键存在,值将被替换为新值。
如果属性的键不存在,则会将键值对添加到属性中。
语法
ALTER VIEW view_identifier SET TBLPROPERTIES ( property_key = property_val [ , ... ] )
参数
view_identifier
指定视图名称,可选择使用数据库名称限定。
语法:
[ database_name. ] view_name
property_key
指定属性键。键可以由多个部分组成,以
.
分隔。语法:
[ key_part1 ] [ .key_part2 ] [ ... ]
删除视图属性
删除现有视图的一个或多个属性。
如果指定的键不存在,则会出现异常。可以使用 IF EXISTS
来避免异常。
语法
ALTER VIEW view_identifier UNSET TBLPROPERTIES [ IF EXISTS ] ( property_key [ , ... ] )
参数
view_identifier
指定视图名称,可选择使用数据库名称限定。
语法:
[ database_name. ] view_name
property_key
指定属性键。键可以由多个部分组成,以
.
分隔。语法:
[ key_part1 ] [ .key_part2 ] [ ... ]
设置视图查询
ALTER VIEW view_identifier AS SELECT
语句会更改视图的定义。SELECT
语句必须有效,且 view_identifier
必须存在。
语法
ALTER VIEW view_identifier AS select_statement
注意 ALTER VIEW
语句不支持 SET SERDE
或 SET SERDEPROPERTIES
属性.
参数
view_identifier
指定视图名称,可选择使用数据库名称限定。
语法:
[ database_name. ] view_name
select_statement
指定视图的定义。查看 select_statement 获得更多相关细节。
示例
-- 重命名视图仅改变名字。
-- 视图的源数据库和目标数据库必须相同。
-- 为源视图和目标视图使用限定或非限定名称。
ALTER VIEW tempdb1.v1 RENAME TO tempdb1.v2;
-- 验证新视图已被创建。
DESCRIBE TABLE EXTENDED tempdb1.v2;
+----------------------------+----------+-------+
| col_name|data_type |comment|
+----------------------------+----------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# Detailed Table Information| | |
| Database| tempdb1| |
| Table| v2| |
+----------------------------+----------+-------+
-- 修改视图设置属性之前
DESC TABLE EXTENDED tempdb1.v2;
+----------------------------+----------+-------+
| col_name| data_type|comment|
+----------------------------+----------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# Detailed Table Information| | |
| Database| tempdb1| |
| Table| v2| |
| Table Properties| [....]| |
| ....| | |
+----------------------------+----------+-------+
-- 在 TBLPROPERTIES 中设置属性
ALTER VIEW tempdb1.v2 SET TBLPROPERTIES ('created.by.user' = "John", 'created.date' = '01-01-2001' );
-- 使用 `DESCRIBE TABLE EXTENDED tempdb1.v2` 来验证
DESC TABLE EXTENDED tempdb1.v2;
+----------------------------+-----------------------------------------------------+-------+
| col_name| data_type|comment|
+----------------------------+-----------------------------------------------------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# Detailed Table Information| | |
| Database| tempdb1| |
| Table| v2| |
| Table Properties|[created.by.user=John, created.date=01-01-2001, ....]| |
| ....| | |
+----------------------------+-----------------------------------------------------+-------+
-- 从 `TBLPROPERTIES` 中移除 `created.by.user` 和 `created.date`
ALTER VIEW tempdb1.v2 UNSET TBLPROPERTIES ('created.by.user', 'created.date');
--使用 `DESC TABLE EXTENDED tempdb1.v2` 来验证更改
DESC TABLE EXTENDED tempdb1.v2;
+----------------------------+----------+-------+
| col_name| data_type|comment|
+----------------------------+----------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# Detailed Table Information| | |
| Database| tempdb1| |
| Table| v2| |
| Table Properties| [....]| |
| ....| | |
+----------------------------+----------+-------+
-- 更改视图定义
ALTER VIEW tempdb1.v2 AS SELECT * FROM tempdb1.v3;
-- 使用 `DESC TABLE EXTENDED tempdb1.v2` 来验证更改
DESC TABLE EXTENDED tempdb1.v2;
+----------------------------+---------------------------+-------+
| col_name| data_type|comment|
+----------------------------+---------------------------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# Detailed Table Information| | |
| Database| tempdb1| |
| Table| v2| |
| Type| VIEW| |
| View Text| select * from tempdb1.v3| |
| View Original Text| select * from tempdb1.v3| |
| ....| | |
+----------------------------+---------------------------+-------+
相关语句
TODO
- 暂时没允许 alter view properties(set/unset都没打开,但是打开之后可以生效)
- view2基于view1,view1被更名,view2无法查询
- 仅支持了alter as select,没支持alter as code
- 由于showview被拦下来了,这部分的sql只有本地测试
- view相关ddl中加入materialized view相关说明或单独列出