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