Amazon Redshift
データベース開発者ガイド

CREATE VIEW

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

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

構文

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 つの画面で定義できる列の最大数は 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 の開始方法 参照してください。

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