全部產品
Search
文件中心

MaxCompute:視圖操作

更新時間:Jun 19, 2024

視圖(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';