- カテゴリ:
CREATE MATERIALIZED VIEW¶
既存のテーブルのクエリに基づいて、現在の/指定されたスキーマに新しいマテリアライズドビューを作成し、ビューにデータを入力します。
詳細については、 マテリアライズドビューの使用 をご参照ください。
- こちらもご参照ください:
ALTER MATERIALIZED VIEW 、 DROP MATERIALIZED VIEW 、 SHOW MATERIALIZED VIEWS
構文¶
CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
[ COPY GRANTS ]
( <column_list> )
[ COMMENT = '<string_literal>' ]
[ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
AS <select_statement>
必須パラメーター¶
名前
ビューの識別子を指定します。ビューが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
ステートメントの選択
ビューの作成に使用されるクエリを指定します。このクエリは、ビューのテキスト/定義として機能します。このクエリは、 SHOW VIEWS、 SHOW MATERIALIZED VIEWS、および VIEWS 情報スキーマビューの出力に表示されます。
ステートメントの選択
には制限があります。詳細については、 以下をご参照ください。
オプションのパラメーター¶
列リスト
:ビュー内の列名を基になるテーブルの列名と同じにしたくない場合は、列名を指定する列リストを含めることができます。(列のデータ型を指定する必要はありません。)
マテリアライズドビューに CLUSTER BY 句を含める場合は、列名リストを含める必要があります。
文字列リテラル
ビューのコメントを指定します。文字列リテラルは一重引用符で囲む必要があります。(エスケープされない限り、文字列リテラルには単一引用符を含めないでください。)
デフォルト:値なし。
式#
マテリアライズドビューをクラスター化する式を指定します。通常、各式はマテリアライズドビューの列の名前です。
マテリアライズドビューのクラスタリングの詳細については、 マテリアライズドビューとクラスタリング をご参照ください。一般的なクラスタリングの詳細については、 データクラスタリングとは をご参照ください。
SECURE
ビューが安全であることを指定します。セキュアビューの詳細については、 安全なビューの使用 をご参照ください。
デフォルト:値なし(ビューは安全ではない)
COPY GRANTS
OR REPLACE
句を使用して既存のビューを置換する場合、置換ビューは元のビューからのアクセス許可を保持します。このパラメーターは、 OWNERSHIP を 除く すべての権限を既存のビューから新しいビューにコピーします。新しいビューは、スキーマ内のオブジェクトタイプに定義された将来の許可を継承 しません。デフォルトでは、CREATE MATERIALIZED VIEW ステートメントを実行するロールが新しいビューを所有します。パラメーターが CREATE VIEW ステートメントに含まれていない場合、新しいビューは元のビューに付与された明示的なアクセス権を継承 しませんが、スキーマ内のオブジェクトタイプに定義された将来の権限を継承します。
許可をコピーする操作は、 CREATE VIEW ステートメントで(つまり、同じトランザクション内で)アトミックに発生することに注意してください。
デフォルト:値なし(付与はコピーされない)
使用上の注意¶
マテリアライズドビューを作成するには、スキーマに対する CREATE MATERIALIZED VIEW 権限と、ベーステーブルに対する SELECT 権限が必要です。権限およびマテリアライズドビューの詳細については、 マテリアライズドビューのスキーマに対する権限 をご参照ください。
マテリアライズドビューの名前を選択する場合は、スキーマに同じ名前のテーブルとビューを含めることはできないことに注意してください。CREATE [MATERIALIZED] VIEW は、同じ名前のテーブルが既にスキーマに存在する場合、エラーを生成します。
ステートメントの選択
を指定するときは、次の点に注意してください。HAVING 句または ORDER BY 句は指定できません。
マテリアライズドビューに CLUSTER BY 句を含める場合は、
列リスト
句を含める必要があります。ステートメントの選択
でベーステーブルを複数回参照する場合は、ベーステーブルのすべての参照に同じ 修飾子 を使用します。たとえば、同じ
ステートメントの選択
で、base_table
、schema.base_table
、およびdatabase.schema.base_table
を組み合わせて使用しないでください。代わりに、これらのフォームの1つ(例:database.schema.base_table
)を選択し、それをステートメントの選択
全体で一貫して使用してください。
マテリアライズドビューには、他にもいくつかの制限があります。詳細については、 マテリアライズドビューの作成に関する制限 と マテリアライズドビューの使用における制約 をご参照ください。
基になるソーステーブルのスキーマが変更されてビュー定義が無効になる場合、ビュー定義は更新されません。例:
ソーステーブルの特定の列を参照するビューが作成され、その後その列はテーブルからドロップされます。
ビューはテーブルの
SELECT *
を使用して作成され、その後、列はテーブルからドロップされます。
これらのシナリオのいずれかで、ビューをクエリするとエラーが返されます。
マテリアライズドビューのソーステーブルがドロップされる場合に、ビューをクエリすると次のエラーが返されます。
Materialized View <ビュー名> is invalid
。
例¶
現在のスキーマに、テーブルからすべての行を選択するコメント付きのマテリアライズドビューを作成します。
CREATE MATERIALIZED VIEW mymv COMMENT='Test view' AS SELECT col1, col2 FROM mytable;
その他の例については、 マテリアライズドビューの使用 の例をご参照ください。