CREATE MATERIALIZED VIEW¶
既存のテーブルのクエリに基づいて、現在の/指定されたスキーマに新しいマテリアライズドビューを作成し、ビューにデータを入力します。
詳細については、 マテリアライズドビューの使用 をご参照ください。
- こちらもご参照ください。
ALTER MATERIALIZED VIEW、 DROP MATERIALIZED VIEW、 SHOW MATERIALIZED VIEWS、 DESCRIBE MATERIALIZED VIEW
構文¶
CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
[ COPY GRANTS ]
( <column_list> )
[ <col1> [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1> , <cond_col1> , ... ) ]
[ WITH ] PROJECTION POLICY <policy_name>
[ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ , <col2> [ ... ] ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
AS <select_statement>
必須パラメーター¶
name
ビューの識別子を指定します。ビューが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
select_statement
ビューの作成に使用するクエリを指定します。このクエリは、ビューのテキスト/定義として機能します。このクエリは、 SHOW VIEWS と SHOW MATERIALIZED VIEWS の出力に表示されます。
select_statement
には制限があります。詳細については、以下をご参照ください。
オプションのパラメーター¶
column_list
:ビュー内の列名を基になるテーブルの列名と同じにしたくない場合は、列名を指定する列リストを含めることができます。(列のデータ型を指定する必要はありません。)
マテリアライズドビューに CLUSTER BY 句を含める場合は、列名リストを含める必要があります。
MASKING POLICY = policy_name
列に設定する マスキングポリシー を指定します。
USING ( col_name , cond_col_1 ... )
条件付きマスキングポリシー SQL 式に渡す引数を指定します。
リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。
追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。
USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。
PROJECTION POLICY policy_name
列に設定する 投影ポリシー を指定します。
string_literal
ビューのコメントを指定します。文字列リテラルは一重引用符で囲む必要があります。(エスケープされない限り、文字列リテラルには単一引用符を含めないでください。)
デフォルト:値なし。
expr#
マテリアライズドビューをクラスター化する式を指定します。通常、各式はマテリアライズドビューの列の名前です。
マテリアライズドビューのクラスタリングの詳細については、 マテリアライズドビューとクラスタリング をご参照ください。一般的なクラスタリングの詳細については、 データクラスタリングとは をご参照ください。
SECURE
ビューがセキュアであることを指定します。セキュアビューの詳細については、 セキュアビューの使用 をご参照ください。
デフォルト: 値なし(ビューはセキュアではない)
COPY GRANTS
OR REPLACE
句を使用して既存のビューを置換する場合、置換ビューは元のビューからのアクセス許可を保持します。このパラメーターは、 OWNERSHIP を 除く すべての権限を既存のビューから新しいビューにコピーします。新しいビューは、スキーマ内のオブジェクト型に定義された将来の付与を継承 しません。デフォルトでは、 CREATE MATERIALIZED VIEW ステートメントを実行するロールが新しいビューを所有します。パラメーターが CREATE VIEW ステートメントに含まれていない場合、新しいビューは元のビューに付与された明示的なアクセス権限を継承 しません が、スキーマ内のオブジェクトタイプに定義された将来の権限は継承します。
許可をコピーする操作は、 CREATE VIEW ステートメントで(つまり、同じトランザクション内で)アトミックに発生することに注意してください。
デフォルト: 値なし(付与はコピーされない)
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
マテリアライズドビューに設定する 行アクセスポリシー を指定します。
AGGREGATION POLICY policy_name
マテリアライズドビューに設定する 集計ポリシー を指定します。
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。
使用上の注意¶
マテリアライズドビューを作成するには、スキーマに対する CREATE MATERIALIZED VIEW 権限と、ベーステーブルに対する SELECT 権限が必要です。権限およびマテリアライズドビューの詳細については、 マテリアライズドビューのスキーマに対する権限 をご参照ください。
マテリアライズドビューの名前を選択する場合は、スキーマに同じ名前のテーブルとビューを含めることはできないことに注意してください。CREATE [ MATERIALIZED ] VIEW は、同じ名前のテーブルがすでにスキーマに存在する場合、エラーを生成します。
select_statement
を指定するときは、次の点に注意してください。HAVING 句または ORDER BY 句は指定できません。
マテリアライズドビューに CLUSTER BY 句を含める場合は、
column_list
句を含める必要があります。select_statement
でベーステーブルを複数回参照する場合は、ベーステーブルのすべての参照に同じ 修飾子 を使用します。たとえば、同じ
select_statement
で、base_table
、schema.base_table
、およびdatabase.schema.base_table
を組み合わせて使用しないでください。代わりに、これらのフォームの1つ(例:database.schema.base_table
)を選択し、それをselect_statement
全体で一貫して使用してください。SELECT ステートメントでは、ストリームオブジェクトをクエリしないでください。ストリームは、ビューまたはマテリアライズドビューのソースオブジェクトとして機能するようには設計されていません。
マテリアライズドビューでは使用できない列名があります。列名が使用できない場合は、列のエイリアスを定義することができます。詳細については、 マテリアライズドビューで許可されていない列名の処理 をご参照ください。
マテリアライズドビューが外部テーブルをクエリする場合は、外部テーブルのファイルレベルのメタデータを更新して、参照されるクラウドストレージの場所の変更を反映し、新しいファイル、更新されたファイル、削除されたファイルを含める必要があります。
外部テーブルのメタデータは、クラウドストレージサービスのイベント通知サービスを使用して 自動で、または ALTER EXTERNAL TABLE ... REFRESH を使用して手動で更新できます。
マテリアライズドビューには、他にもいくつかの制限があります。詳細については、 マテリアライズドビューの作成に関する制限 と マテリアライズドビューの使用における制約 をご参照ください。
基になるソーステーブルのスキーマが変更されてビュー定義が無効になる場合、ビュー定義は更新されません。例:
ベーステーブルからビューが作成され、その後ベーステーブルから列がドロップされます。
マテリアライズドビューのベーステーブルがドロップされます。
これらのシナリオでは、ビューをクエリすると、ビューが無効になった理由を含むエラーが返されます。例:
Failure during expansion of view 'MV1': SQL compilation error: Materialized View MV1 is invalid. Invalidation reason: DDL Statement was executed on the base table 'MY_INVENTORY'. Marked Materialized View as invalid.
このような場合は、次を実行できます。
ベーステーブルがドロップされ、それが Time Travel のデータ保持期間 内である場合は、 ベーステーブルのドロップを解除 して、マテリアライズドビューを再度有効にすることができます。
CREATE OR REPLACE MATERIALIZED VIEW コマンドを使用して、ビューを再作成します。
メタデータについて。
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
OR REPLACE
の使用は、既存のマテリアライズドビューで DROP MATERIALIZED VIEW を使用してから、同じ名前で新しいビューを作成することと同じです。CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
これは、 CREATE OR REPLACE MATERIALIZED VIEW 操作と同時に実行されるクエリはすべて、古いマテリアライズドビューバージョンまたは新しいマテリアライズドビューバージョンのいずれかを使用することを意味します。
1つ以上のマテリアライズドビュー列にマスキングポリシーを使用してマテリアライズドビューを作成する場合、またはマテリアライズドビューに行アクセスポリシーを追加する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されたマテリアライズドビューに対するクエリをシミュレートします。
例¶
現在のスキーマに、テーブルからすべての行を選択するコメント付きのマテリアライズドビューを作成します。
CREATE MATERIALIZED VIEW mymv COMMENT='Test view' AS SELECT col1, col2 FROM mytable;
その他の例については、 マテリアライズドビューの使用 の例をご参照ください。