视图(View)是一种在表层级上创建的虚拟表,它可以基于一个或多个表而存在。通过使用视图,您可以保留查询逻辑(SQL语句)而无需创建实际的表占用存储空间。本文为您介绍管理视图的相关操作命令和使用示例。
视图操作命令如下。
类型 | 功能 | 角色 | 操作入口 |
基于查询语句创建视图或更新已存在的视图。 | 具备项目空间创建表权限(CreateTable)的用户。 | 本文中的命令您可以在如下工具平台执行: | |
修改已创建视图的名称。 | 具备修改表权限(Alter)的用户。 | ||
查看已创建的视图的信息。 | 具备读取表元信息权限(Describe)的用户。 | ||
删除已创建的视图。 | 具备删除表权限(Drop)的用户。 | ||
修改已创建的视图的所有人。 | 具备修改表权限(Alter)的用户。 |
创建或更新视图
基于查询语句创建视图或更新已存在的视图。
使用限制
视图可以引用其他视图,但不能引用自己,也不能循环引用。
不允许向视图写入数据,例如使用
insert into
或者insert overwrite
操作视图。
命令格式
CREATE [OR REPLACE] VIEW [IF NOT EXISTS] <view_name> [(<col_name> [comment <col_comment>], ...)] [comment <view_comment>] AS <select_statement>;
参数说明
OR REPLACE:可选。更新视图需要携带该字段。
IF NOT EXISTS:可选。如果没有指定if not exists,在视图已经存在时用
create view
会导致异常。这种情况可以用create or replace view
重建视图,重建后视图本身的权限保持不变。view_name:必填。待创建或更新的视图的名称。
col_name:必填。待创建视图包含的列名称。
col_comment:可选,待创建视图的列的注释。
view_comment:可选。待创建视图的注释。
select_statement:必填。
select
查询语句,是视图的数据来源,您必须有视图所引用表的读权限。视图只能包含一个有效的select
语句。说明创建或更新好视图后,如果视图引用的表发生了变更,有可能导致视图无法访问,例如删除了引用的表。您需要自行维护引用表及视图之间的对应关系。
使用示例
示例1:基于表sale_detail创建视图sale_detail_view。
CREATE VIEW IF NOT EXISTS sale_detail_view (store_name, customer_id, price, sale_date, region) comment 'a view for table sale_detail' AS SELECT * FROM sale_detail;
示例2:基于表sale_detail更新视图sale_detail_view。
CREATE OR REPLACE VIEW IF NOT EXISTS sale_detail_view (store_name, customer_id, price) comment 'a view for table sale_detail' AS SELECT shop_name, customer_id, total_price FROM sale_detail;
重命名视图
修改已创建视图的名称。
命令格式
ALTER VIEW <view_name> RENAME TO <new_view_name>;
参数说明
view_name:必填。需要重命名视图的名称。
new_view_name:必填。新的视图名称。如果已存在同名视图,会返回报错。
使用示例
--将视图view sale_detail_view重命名为market。 ALTER VIEW sale_detail_view RENAME TO market;
查看视图
命令详情请参见查看表或视图信息。
删除视图
删除已创建的视图。
命令格式
DROP VIEW [IF EXISTS] <view_name>;
参数说明
IF EXISTS:可选。如果视图不存在且没有指定if exists,会返回报错。
view_name:必填。待删除的视图的名称。
使用示例
--删除视图sale_detail_view。 DROP VIEW IF EXISTS sale_detail_view;
修改视图的所有人
修改已创建的视图的所有人,即视图Owner。
命令格式
ALTER VIEW <view_name> CHANGEOWNER TO <new_owner>;
参数说明
view_name:必填。待修改Owner的视图的名称。
new_owner:必填。修改后的Owner的账号。
使用示例
--将视图sale_detail_view的所有人修改为ALIYUN$xxx@aliyun.com。 ALTER VIEW sale_detail_view CHANGEOWNER TO 'ALIYUN$xxx@aliyun.com';