CREATE VIEW - Amazon Redshift

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

CREATE VIEW

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

若要建立標準檢視,您需要存取基礎資料表或基礎檢視。若要查詢標準檢視,您需要選取檢視本身的許可,但不需要選取基礎資料表的許可。如果您建立參照其他結構描述中資料表或視觀表的視觀表,或是建立參照具體化視觀表的視觀表,則需要使用權限。若要查詢近期繫結視觀表,您需要選取近期繫結視觀表本身的權限。您也應該確定晚期繫結檢視的擁有者具有參照物件 (資料表、檢視或使用者定義函數) 的選取權限。如需近期繫結視觀表的詳細資訊,請參閱 使用須知

所需的許可

要使用 CREATEVIEW,需要以下權限之一。

  • 若要使用 CREATE [ORREPLACE] 建立檢視VIEW:

    • 超級使用者

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

  • 若要使用 OR 取代現有視圖,請執CREATE行REPLACEVIEW下列

    • 超級使用者

    • 具有 CREATE [ORREPLACE] VIEW 權限的使用者

    • 檢視擁有者

如果使用者想要存取包含使用者定義函數的檢視,則使用者必須擁有該函數的EXECUTE權限。

語法

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

參數

或 REPLACE

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

當檢視被替換時,其他屬性 (例如所有權和授予的權限) 會保留下來。

name

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

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

如需有效名稱的相關資訊,請參閱 名稱與識別碼。您無法在系統資料庫 template0、template1 和 padb_harvest 或 sys:internal中建立資料表或視觀表。

column_name

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

query

評估為資料表的查詢 (以SELECT陳述式的形式)。此資料表會定義檢視中的資料欄和資料列。

WITH沒有 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 Spectrum 這兩種資料表。例如,您可以使用 UNLOAD 命令將舊資料封存至 Amazon S3。然後建立參考 Amazon S3 中資料的 Redshift Spectrum 外部資料表,並建立查詢這兩種資料表的檢視。下列範例會使用UNIONALL子句來加入 Amazon Redshift SALES 表格和紅移頻譜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

當您從近期繫結檢視建立標準檢視時,標準檢視的定義會包含進行標準檢視時的近期繫結檢視定義。系統不會追蹤近期繫結檢視的相依性,因此不會在標準檢視中追蹤對近期繫結檢視所做的變更。

若要更新標準檢視表以參考最新定義的最新定義,請使用您用來建立標準檢視表的初始檢視定義來執行 CREATE OR REPLACE VIEW。

請參閱下列範例,了解如何從近期繫結檢視建立標準檢視。

create view sales_vw_lbv as select * from public.sales with no schema binding; show view sales_vw_lbv; Show View DDL statement -------------------------------------------------------------------------------- create view sales_vw_lbv as select * from public.sales with no schema binding; (1 row) create view sales_vw as select * from sales_vw_lbv; show view sales_vw; Show View DDL statement --------------------------------------------------------------------------------------------------------------------- SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv; (1 row)

請注意,標準檢視的DDL陳述式中顯示的最新繫結檢視是在建立標準檢視時定義的,之後不會隨著您對最新繫結檢視所做的任何變更而更新。

範例

範例指令使用一組稱為資料TICKIT庫的物件和資料範例。如需詳細資訊, 請參閱範本資料庫

下面的命令從一個名為的表創建一個名為 myevent 的視圖。EVENT

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

下面的命令從一個名為表創建一個名為 myuser 的視圖。USERS

create view myuser as select lastname from users;

下面的命令創建或從名為表中替換一個名為 myuser 的視圖。USERS

create or replace view myuser as select lastname from users;

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

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