修改视图
描述
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|
| | | |
|# 详细 表 信息| | |
| 数据库| tempdb1| |
| 表| v2| |
+----------------------------+----------+-------+
-- 在 ALTER VIEW SET TBLPROPERTIES 之前
DESC TABLE EXTENDED tempdb1.v2;
+----------------------------+----------+-------+
| col_name| data_type|comment|
+----------------------------+----------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# 详细 表 信息| | |
| 数据库| tempdb1| |
| 表| v2| |
| 表 属性| [....]| |
+----------------------------+----------+-------+
-- 在 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|
| | | |
|# 详细 表 信息| | |
| 数据库| tempdb1| |
| 表| v2| |
| 表 属性|[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|
| | | |
|# 详细 表 信息| | |
| 数据库| tempdb1| |
| 表| v2| |
| 表 属性| [....]| |
+----------------------------+----------+-------+
-- 更改视图定义
ALTER VIEW tempdb1.v2 AS SELECT * FROM tempdb1.v1;
-- 使用 `DESC TABLE EXTENDED` 验证
DESC TABLE EXTENDED tempdb1.v2;
+----------------------------+---------------------------+-------+
| col_name| data_type|comment|
+----------------------------+---------------------------+-------+
| c1| int| null|
| c2| string| null|
| | | |
|# 详细 表 信息| | |
| 数据库| tempdb1| |
| 表| v2| |
| 类型| 视图| |
| 视图 文本| select * from tempdb1.v1| |
| 视图 原始 文本| select * from tempdb1.v1| |
+----------------------------+---------------------------+-------+