メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

CREATE VIEW

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

ビューの所有権を持っている場合、またはビューに対する特権が付与されている場合でも、基礎となるテーブルにアクセス権を持っていることにはなりません。基礎となるテーブルに対するアクセス権を明示的に付与する必要があります。

構文

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

Parameters

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 は、ビューのクエリが実行されるまで、依存関係をチェックしません。

WITH NO SCHEMA BINDING 句を含める場合、SELECT ステートメントで参照されるテーブルとビューは、スキーマ名で修飾する必要があります。スキーマは、参照されるテーブルが存在しない場合でも、ビューを作成するときに存在している必要があります。たとえば、次のステートメントはエラーを返します。

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

以下のステートメントは正常に実行されます。

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

注記

ビューの更新、ビューへの挿入、ビューからの削除を行うことはできません。

使用に関する注意事項

遅延バインドビュー

遅延バインドビューは、ビューのクエリが行われるまで、基礎となるデータベースオブジェクト (テーブルや他のビュー) などをチェックしません。その結果、ビューを削除して再作成することなく、基礎となるオブジェクトを変更または削除できます。

遅延バインドビューを作成するには、WITH NO SCHEMA BINDING 句を含めます。次の例では、スキーマバインドなしでビューを作成します。

Copy
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

次の例は、ビューを再作成せずに基礎となるテーブルを変更できることを示しています。

Copy
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 スペクトルの外部テーブルを参照できます。遅延バインドビューの 1 つのアプリケーションは、Amazon Redshift と Redshift Spectrum テーブルの両方をクエリできます。たとえば、UNLOAD コマンドを使用して古いデータを Amazon S3 にアーカイブすることができます。次に、Amazon S3 のデータを参照する Redshift Spectrum 外部テーブルを作成し、両方のテーブルをクエリするビューを作成します。次の例では、UNION ALL 句を使用して、Amazon Redshift SALES テーブルと Redshift Spectrum SPECTRUM.SALES テーブルを結合します。

Copy
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 というビューを作成します。

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

次のコマンドでは、USERS というテーブルから myuser というビューを作成します。

Copy
create view myuser as select lastname from users;

次の例では、スキーマバインドなしでビューを作成します。

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