视图操作

视图(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';