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