CREATE VIEW - Amazon Redshift

CREATE VIEW

データベースにビューを作成します。このビューは物理的にマテリアライズされません。ビューを定義するクエリは、ビューがクエリで参照されるたびに実行されます。外部テーブルでビューを作成するには、WITH NO SCHEMA BINDING 句を含めます。

標準ビューを作成するには、基礎となるテーブルまたは基礎となるビューへのアクセスが必要です。標準ビューにクエリを実行するには、ビュー自体に対する選択のアクセス許可が必要ですが、基礎となるテーブルに対する選択のアクセス許可は必要ありません。別のスキーマのテーブルまたはビューを参照するビューを作成する場合や、マテリアライズドビューを参照するビューを作成する場合は、使用許可が必要です。遅延バインドビューにクエリを実行するには、遅延バインドビュー自体に対する選択のアクセス許可が必要です。また、遅延バインドビューの所有者が、参照先のオブジェクト (テーブル、ビュー、またはユーザー定義関数) に対する選択権限を持っていることも確認します。遅延バインドビューの詳細については、「使用に関する注意事項」を参照してください。

必要な権限

CREATE VIEW に必要な権限を以下に示します。

  • CREATE VIEW の場合:

    • スーパーユーザー

    • CREATE [ または REPLACE ] ビューの作成権限を持つユーザー

  • REPLACE VIEW の場合:

    • スーパーユーザー

    • CREATE [ または REPLACE ] ビューの作成権限を持つユーザー

    • ビューの所有者

構文

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、または sys:internal にテーブルまたはビューを作成することはできません。

column_name

ビューの列に使用されるオプションの名前リスト。列名を指定しない場合、列名はクエリから取得されます。1 つの画面で定義できる列の最大数は 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 の外部テーブルを参照できます。遅延バインドビューの 1 つのアプリケーションは、Amazon Redshift と Redshift Spectrum テーブルの両方をクエリできます。例えば、UNLOAD コマンドを使用して古いデータを Amazon S3 にアーカイブすることができます。次に、Amazon S3 のデータを参照する Redshift Spectrum 外部テーブルを作成し、両方のテーブルをクエリするビューを作成します。次の例では、UNION ALL 句を使用して、Amazon Redshift SALES テーブルと Redshift Spectrum SPECTRUM.SALES テーブルを結合します。

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

SPECTRUM.SALES など、Redshift Spectrum 外部テーブルの作成の詳細については、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 データベースと呼ばれるオブジェクトとデータのサンプルセットを使用しています。詳細については、「サンプルデータベース」を参照してください。

次のコマンドでは、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;