全部產品
Search
文件中心

MaxCompute:視圖操作

更新時間:Dec 20, 2024

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