カテゴリ:

テーブル、ビュー、シーケンス DDL

CREATE MATERIALIZED VIEW

既存のテーブルのクエリに基づいて、現在の/指定されたスキーマに新しいマテリアライズドビューを作成し、ビューにデータを入力します。

詳細については、 マテリアライズドビューの使用 をご参照ください。

こちらもご参照ください:

ALTER MATERIALIZED VIEWDROP MATERIALIZED VIEWSHOW MATERIALIZED VIEWS

このトピックの内容:

構文

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 ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ , <col2> [ ... ] ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]
  [ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
  AS <select_statement>

必須パラメーター

名前

ビューの識別子を指定します。ビューが作成されるスキーマに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

ステートメントの選択

ビューの作成に使用されるクエリを指定します。このクエリは、ビューのテキスト/定義として機能します。このクエリは、 SHOW VIEWSSHOW MATERIALIZED VIEWS の出力に表示されます。

ステートメントの選択 には制限があります。詳細については、 以下をご参照ください。

オプションのパラメーター

列リスト

ビュー内の列名を基になるテーブルの列名と同じにしたくない場合は、列名を指定する列リストを含めることができます。(列のデータ型を指定する必要はありません。)

マテリアライズドビューに CLUSTER BY 句を含める場合は、列名リストを含める必要があります。

MASKING POLICY = ポリシー名

列に設定する マスキングポリシー を指定します。

ROW ACCESS POLICY ポリシー名 ON ( 列名 [ , 列名 ... ] )

マテリアライズドビューに設定する 行アクセスポリシー を指定します。

TAG ( タグ名 = 'タグ値' [ , タグ名 = 'タグ値' , ... ] )

タグ 名(つまり、キー)とタグ値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。オブジェクトに設定できる 一意の タグキーの最大数は20です。

注釈

テーブルまたはビューとその列の場合、設定できる一意のタグキーの総数は20です。

たとえば、テーブル内にある単一列の1列に10個の一意のタグキーが設定されている場合、Snowflakeでは、その列、テーブル内にある他の列、テーブル自体、またはテーブルとその列をいくつか組み合わせたものに10個の一意のタグキーを追加で設定できます。一意のタグキーが20の制限に達すると、テーブルまたはその列に追加のタグキーを設定できなくなります。

文字列リテラル

ビューのコメントを指定します。文字列リテラルは一重引用符で囲む必要があります。(エスケープされない限り、文字列リテラルには単一引用符を含めないでください。)

デフォルト:値なし。

式#

マテリアライズドビューをクラスター化する式を指定します。通常、各式はマテリアライズドビューの列の名前です。

マテリアライズドビューのクラスタリングの詳細については、 マテリアライズドビューとクラスタリング をご参照ください。一般的なクラスタリングの詳細については、 データクラスタリングとは をご参照ください。

SECURE

ビューが安全であることを指定します。セキュアビューの詳細については、 安全なビューの使用 をご参照ください。

デフォルト:値なし(ビューは安全ではない)

COPY GRANTS

OR REPLACE 句を使用して既存のビューを置換する場合、置換ビューは元のビューからのアクセス許可を保持します。このパラメーターは、 OWNERSHIP を 除く すべての権限を既存のビューから新しいビューにコピーします。新しいビューは、スキーマ内のオブジェクトタイプに定義された将来の許可を継承 しません。デフォルトでは、CREATE MATERIALIZED VIEW ステートメントを実行するロールが新しいビューを所有します。

パラメーターが CREATE VIEW ステートメントに含まれていない場合、新しいビューは元のビューに付与された明示的なアクセス権を継承 しませんが、スキーマ内のオブジェクトタイプに定義された将来の権限を継承します。

許可をコピーする操作は、 CREATE VIEW ステートメントで(つまり、同じトランザクション内で)アトミックに発生することに注意してください。

デフォルト: 値なし(付与はコピーされない)

プレビューパラメーター

次のパラメーターを使用して、マスキングポリシーの条件付き列を指定します。

USING ( 列名 , 条件付き列1 ... )

条件付きマスキングポリシー SQL 式に渡す引数を指定します。

リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。

追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。

USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。

使用上の注意

  • マテリアライズドビューを作成するには、スキーマに対する CREATE MATERIALIZED VIEW 権限と、ベーステーブルに対する SELECT 権限が必要です。権限およびマテリアライズドビューの詳細については、 マテリアライズドビューのスキーマに対する権限 をご参照ください。

  • マテリアライズドビューの名前を選択する場合は、スキーマに同じ名前のテーブルとビューを含めることはできないことに注意してください。CREATE [MATERIALIZED] VIEW は、同じ名前のテーブルが既にスキーマに存在する場合、エラーを生成します。

  • ステートメントの選択 を指定するときは、次の点に注意してください。

    • HAVING 句または ORDER BY 句は指定できません。

    • マテリアライズドビューに CLUSTER BY 句を含める場合は、 列リスト 句を含める必要があります。

    • ステートメントの選択 でベーステーブルを複数回参照する場合は、ベーステーブルのすべての参照に同じ 修飾子 を使用します。

      たとえば、同じ ステートメントの選択 で、 base_tableschema.base_table、および database.schema.base_table を組み合わせて使用しないでください。代わりに、これらのフォームの1つ(例: database.schema.base_table)を選択し、それを ステートメントの選択 全体で一貫して使用してください。

    • SELECT ステートメントでは、ストリームオブジェクトをクエリしないでください。ストリームは、ビューまたはマテリアライズドビューのソースオブジェクトとして機能するようには設計されていません。

  • マテリアライズドビューには、他にもいくつかの制限があります。詳細については、 マテリアライズドビューの作成に関する制限マテリアライズドビューの使用における制約 をご参照ください。

  • 基になるソーステーブルのスキーマが変更されてビュー定義が無効になる場合、ビュー定義は更新されません。例:

    • ソーステーブルの特定の列を参照するビューが作成され、その後その列はテーブルからドロップされます。

    • ビューはテーブルの SELECT * を使用して作成され、その後、列はテーブルからドロップされます。

    これらのシナリオのいずれかで、ビューをクエリするとエラーが返されます。

  • マテリアライズドビューのソーステーブルがドロップされると、ビューをクエリする場合に次のエラーが返されます。 Materialized View <ビュー名> is invalid

  • メタデータについて。

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

  • OR REPLACE の使用は、既存のマテリアライズドビューで DROP MATERIALIZED VIEW を使用してから、同じ名前で新しいビューを作成することと同じです。ドロップアクションと作成アクションは、単一のアトミック操作で発生します。これは、 CREATE OR REPLACE MATERIALIZED VIEW 操作と同時に実行されるクエリはすべて、古いマテリアライズドビューバージョンまたは新しいマテリアライズドビューバージョンのいずれかを使用することを意味します。

  • 1つ以上のマテリアライズドビュー列にマスキングポリシーを使用してマテリアライズドビューを作成する場合、またはマテリアライズドビューに行アクセスポリシーを追加する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されたマテリアライズドビューに対するクエリをシミュレートします。

現在のスキーマに、テーブルからすべての行を選択するコメント付きのマテリアライズドビューを作成します。

CREATE MATERIALIZED VIEW mymv
    COMMENT='Test view'
    AS
    SELECT col1, col2 FROM mytable;

その他の例については、 マテリアライズドビューの使用 の例をご参照ください。