视图(View)是一种在表层级上创建的虚拟表,它可以基于一个或多个表而存在。通过使用视图,您可以保留查询逻辑(SQL语句)而无需创建实际的表占用存储空间。本文为您介绍管理视图的相关操作命令和使用示例。
视图操作命令如下。
类型 | 功能 | 角色 | 操作入口 |
基于查询语句创建视图或更新已存在的视图。 | 具备项目空间创建表权限(CreateTable)的用户。 | 本文中的命令您可以在如下工具平台执行: | |
修改已创建视图的名称。 | 具备修改表权限(Alter)的用户。 | ||
修改已创建的视图的所有人。 | 具备修改表权限(Alter)的用户。 | ||
列出项目下所有的普通视图。 | 具备项目查看对象列表权限(List)的用户。 | ||
查看已创建的视图的信息。 | 具备读取表元信息权限(Describe)的用户。 | ||
删除已创建的视图。 | 具备删除表权限(Drop)的用户。 |
创建或更新视图
基于查询语句创建视图或更新已存在的视图。
使用限制
视图可以引用其他视图,但不能引用自己,也不能循环引用。
不允许向视图写入数据,例如使用
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;
修改视图的所有人
修改已创建的视图的所有人,即视图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';
列出项目下所有普通视图
SHOW VIEWS;
命令需要在MaxCompute客户端(odpscmd)0.43.0及以上版本中执行。
命令格式
如果需要仅查看项目下的所有视图,可使用
SHOW VIEWS;
。您也可以通过SHOW TABLES;
列出项目下所有表和视图,详情请参见列出项目下的表和视图。--列出项目下所有普通视图。 SHOW VIEWS; --列出项目下视图名与chart匹配的视图。 SHOW VIEWS LIKE '<chart>';
使用示例
SHOW VIEWS LIKE 'sale*';
返回结果如下。
ALIYUN$account_name:sale_detail_view ...... --ALIYUN是系统提示符,表示您是阿里云主账号用户。如果您是阿里云RAM用户,系统提示符为RAM。
查看视图
命令格式
DESC <view_name>;
参数说明
view_name:必填。待查看视图的名称。
使用示例
DESC sale_detail_view;
删除视图
删除已创建的视图。
命令格式
DROP VIEW [IF EXISTS] <view_name>;
参数说明
参数
是否必填
说明
IF EXISTS
否
如果视图不存在且没有指定IF EXISTS,会返回报错。
view_name
是
待删除的视图的名称。
使用示例
--删除视图sale_detail_view。 DROP VIEW IF EXISTS sale_detail_view;