CREATE VIEW - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CREATE VIEW

在資料庫中建立檢視。檢視不會實際具體化;定義檢視的查詢會在每次查詢中參考檢視時執行。若要建立外部資料表的檢視,請包含 WITH NO SCHEMA BINDING 子句。

若要建立標準檢視,您需要存取基礎資料表。若要查詢標準檢視,您需要選取檢視本身的權限,但不需要選取基礎資料表的權限。若要查詢近期繫結檢視,您需要選取近期繫結檢視本身的權限。您也應該確認近期繫結檢視的擁有者具有所參考物件 (資料表、檢視或使用者定義的函數) 的選取權限。如需近期繫結檢視的詳細資訊,請參閱 使用須知

必要的權限

以下是創建視圖所需的權限:

  • 對於 CREATE VIEW:

    • 超級使用者

    • 擁有 CREATE [OR REPLACE] VIEW 權限的使用者

  • 對於替換視圖:

    • 超級使用者

    • 擁有 CREATE [OR REPLACE] VIEW 權限的使用者

    • VIEW 擁有者

Syntax (語法)

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query [ WITH NO SCHEMA BINDING ]

參數

OR REPLACE

如果有同名的檢視存在,則會取代該檢視。您只能將檢視取代為使用相同的資料欄名稱和資料類型產生一組相同資料欄的新查詢。CREATE OR REPLACE VIEW 會鎖定檢視的讀取和寫入,直到操作完成。

替換視圖時,其其他屬性(如所有權和授予的權限)將被保留。

name

檢視的名稱。如果有提供結構描述名稱 (例如 myschema.myview),則會使用指定的結構描述建立檢視。否則,檢視會在目前結構描述中建立。檢視名稱必須與相同結構描述中的任何其他檢視或資料表名稱不同。

若您指定 '#' 開頭的檢視名稱,所建立的檢視會是臨時檢視,而且只可在目前工作階段中看見。

如需有效名稱的詳細資訊,請參閱 名稱與識別符。您無法在系統資料庫 template0、template1 和 padb_harvest 中建立資料表或檢視。

column_name

選用的名稱清單,將用於檢視中的資料欄。若未提供任何資料欄名稱,則會從查詢衍生資料欄名稱。單一檢視中可定義的資料欄數目上限為 1,600 個。

query

判斷值為資料表的查詢 (採用 SELECT 陳述式的形式)。此資料表會定義檢視中的資料欄和資料列。

WITH NO SCHEMA BINDING

此子句會指定檢視不會與底層資料庫物件繫結,像是資料表和使用者定義的函數。因此,檢視和其參考的物件之間並無相依性。即使參考的物件不存在,您仍可以建立檢視。由於沒有相依性,您可以捨棄或修改參考物件,而不會影響檢視。在查詢視圖之前,Amazon Redshift 不會檢查依賴關係。若要檢視近期繫結檢視的詳細資訊,請執行 PG_GET_LATE_BINDING_VIEW_COLS 函數。

若包含 WITH NO SCHEMA BINDING 子句,則 SELECT 陳述式中參考的資料表和檢視都必須以結構描述名稱限定。檢視建立時,結構描述必須存在,即使參考的資料表不存在也一樣。例如,下列陳述式會傳回錯誤。

create view myevent as select eventname from event with no schema binding;

下列陳述會成功運行。

create view myevent as select eventname from public.event with no schema binding;
注意

您無法在檢視中進行更新、插入或刪除操作。

使用須知

近期繫結檢視

在對檢視進行查詢之前,近期繫結檢視不會檢查底層資料庫物件,像是資料表和其他檢視。因此,您可以修改或捨棄底層物件,而不會捨棄和重新建立檢視。若您捨棄底層物件,對近期繫結檢視的查詢將會失敗。若對近期繫及檢視的查詢參考底層物件中不存在的資料欄,則查詢將會失敗。

若您捨棄後再次建立近期繫結檢視的基礎資料表或檢視,則會建立具有預設存取許可的新物件。您可能需要對將查詢檢視的使用者授予底層物件的許可。

若要建立近期繫結檢視,請包含 WITH NO SCHEMA BINDING 子句。以下範例會建立不含結構描述繫結的檢視。

create view event_vw as select * from public.event with no schema binding; select * from event_vw limit 1; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

以下範例顯示您可以修改基礎資料表,但不重新建立檢視。

alter table event rename column eventname to title; select * from event_vw limit 1; eventid | venueid | catid | dateid | title | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

您只能在晚期結合檢視中參考 Amazon Redshift Spectrum 外部資料表。近期綁定檢視的應用方式之一,就是查詢 Amazon Redshift 和 Redshift 譜表。例如,您可以使用UNLOAD命令將舊資料歸檔至 Amazon S3。然後建立參考 Amazon S3 上資料的 Redshift Spectrum 外部資料表,並建立查詢這兩種資料表的檢視。下列範例會使用 UNION ALL 子句加入 Amazon RedshiftSALES表和 Redshift 頻譜SPECTRUM.SALES資料表。

create view sales_vw as select * from public.sales union all select * from spectrum.sales with no schema binding;

如需建立 Redshift Spectrum 外部資料表的詳細資訊,包括 SPECTRUM.SALES 資料表,請參閱 開始使用 Amazon Redshift Spectrum

範例

以下命令會從名為 EVENT 的資料表建立名為 myevent 的檢視。

create view myevent as select eventname from event where eventname = 'LeAnn Rimes';

以下命令會從名為 USERS 的資料表建立名為 myuser 的檢視。

create view myuser as select lastname from users;

以下命令會從名為 USERS 的資料表建立或取代名為 myuser 的檢視。

create or replace view myuser as select lastname from users;

以下範例會建立不含結構描述繫結的檢視。

create view myevent as select eventname from public.event with no schema binding;