ALTER VIEW

既存のビューのプロパティを変更します。現在サポートされている操作は次のとおりです。

  • ビューの名前の変更。

  • セキュアビューへの変換(セキュアビューからの復元)。

  • ビューのコメントの追加、上書き、削除。

このコマンドを使用してビューの定義を変更することは できない ことに注意してください。ビューの定義を変更するには、ビューをドロップしてから再作成する必要があります。

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

CREATE VIEWDROP VIEWSHOW VIEWSDESCRIBE VIEW

構文

ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER VIEW [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'

ALTER VIEW [ IF EXISTS ] <name> UNSET COMMENT

ALTER VIEW [ IF EXISTS ] <name> SET SECURE

ALTER VIEW [ IF EXISTS ] <name> SET CHANGE_TRACKING =  { TRUE | FALSE }

ALTER VIEW <name> UNSET SECURE

ALTER VIEW <name> dataMetricFunctionAction

ALTER VIEW [ IF EXISTS ] <name> dataGovnPolicyTagAction
Copy

条件:

dataMetricFunctionAction ::=

    SET DATA_METRIC_SCHEDULE = {
        '<num> MINUTE'
      | 'USING CRON <expr> <time_zone>'
      | 'TRIGGER_ON_CHANGES'
    }

  | UNSET DATA_METRIC_SCHEDULE

  | { ADD | DROP } DATA METRIC FUNCTION <metric_name>
      ON ( <col_name> [ , ... ] )
      [ , <metric_name_2> ON ( <col_name> [ , ... ] ) ]
  | MODIFY DATA METRIC FUNCTION <metric_name>
      ON ( <col_name> [ , ... ] ) { SUSPEND | RESUME }
      [ , <metric_name_2> ON ( <col_name> [ , ... ] ) { SUSPEND | RESUME } ]
Copy
dataGovnPolicyTagAction ::=
  {
      SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
    | UNSET TAG <tag_name> [ , <tag_name> ... ]
  }
  |
  {
      ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] )
    | DROP ROW ACCESS POLICY <policy_name>
    | DROP ROW ACCESS POLICY <policy_name> ,
        ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] )
    | DROP ALL ROW ACCESS POLICIES
  }
  |
  {
      SET AGGREGATION POLICY <policy_name>
        [ ENTITY KEY ( <col_name> [, ... ] ) ]
        [ FORCE ]
    | UNSET AGGREGATION POLICY
  }
  |
  ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type>
    [ [ WITH ] MASKING POLICY <policy_name>
          [ USING ( <col1_name> , <cond_col_1> , ... ) ] ]
    [ [ WITH ] PROJECTION POLICY <policy_name> ]
    [ [ WITH ] TAG ( <tag_name> = '<tag_value>'
          [ , <tag_name> = '<tag_value>' , ... ] ) ]
  |
  {
    { ALTER | MODIFY } [ COLUMN ] <col1_name>
        SET MASKING POLICY <policy_name>
          [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ]
      | UNSET MASKING POLICY
  }
  |
  {
    { ALTER | MODIFY } [ COLUMN ] <col1_name>
        SET PROJECTION POLICY <policy_name>
          [ FORCE ]
      | UNSET PROJECTION POLICY
  }
  |
  { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG
      <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
      , [ COLUMN ] <col2_name> SET TAG
          <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
  |
  { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
                   , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

パラメーター

name

変更するビューの識別子を指定します。識別子にスペースまたは特殊文字が含まれる場合、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

RENAME TO new_name

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

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

オプションでオブジェクトの名前を変更して、オブジェクトを別のデータベースやスキーマに移動できます。これを実行するには、新しいデータベース名やスキーマ名をそれぞれ db_name.schema_name.object_name または schema_name.object_name の形式で含む、修飾された new_name 値を指定します。

注釈

  • 宛先データベースやスキーマはすでに存在している必要があります。また、同じ名前のオブジェクトが宛先データベースにすでに存在することはできません。存在する場合、ステートメントはエラーを返します。

  • オブジェクトを管理アクセススキーマに移動することは、オブジェクトの所有者(つまり、オブジェクトに対して OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き 禁止されています。

オブジェクトの名前を変更すると、そのオブジェクトを参照する他のオブジェクトも新しい名前で更新する必要があります。

SET ...

ビューに設定するプロパティを指定します。

SECURE

ビューをセキュアとして指定します。

CHANGE_TRACKING = TRUE | FALSE

テーブルの変更追跡を有効または無効にするように指定します。

  • TRUE は、ビューで変更の追跡を有効にし、その設定を基になるすべてのテーブルにカスケードします。

  • FALSE は、ビューの変更追跡を無効にし、その設定をすべての基になるテーブルにカスケードします。

COMMENT = 'string_literal'

ビューのコメントを追加するか、既存のコメントを上書きします。

注釈

各ビュープロパティを個別に設定する必要があります。

UNSET ...

ビューの設定を解除するプロパティを指定し、デフォルトにリセットします。

  • SECURE

  • COMMENT

プロパティをリセットするときは、名前のみを指定します。プロパティの値を指定すると、エラーが返されます。

注釈

各ビュープロパティを個別にリセットする必要があります。

データメトリック関数アクション(dataMetricFunctionAction

DATA_METRIC_SCHEDULE ...

データメトリック関数を定期的に実行するスケジュールを指定します。

'num MINUTE'

データメトリックの実行間に挿入される待機時間の間隔(分単位)を指定します。正の整数のみを受け入れます。

num M 構文もサポートしています。

データメトリック関数には、以下の値のいずれかを使用します。 5 153060720、または 1440

'USING CRON expr time_zone'

データメトリック関数を定期的に実行するためのcron式とタイムゾーンを指定します。標準のcronユーティリティ構文のサブセットをサポートします。

タイムゾーンのリストについては、 tzデータベースタイムゾーンのリスト をご参照ください。

cron式は以下のフィールドで構成され、周期間隔は少なくとも5分にする必要があります。

# __________ minute (0-59)
# | ________ hour (0-23)
# | | ______ day of month (1-31, or L)
# | | | ____ month (1-12, JAN-DEC)
# | | | | _ day of week (0-6, SUN-SAT, or L)
# | | | | |
# | | | | |
  * * * * *
Copy

次の特殊文字がサポートされています。

*

ワイルドカード。フィールドのオカレンスを指定します。

L

「最後」の略。曜日フィールドで使用すると、特定の月の「最後の金曜日」(「5L」)などの構造を指定できます。月の日フィールドでは、月の最後の日を指定します。

/{n}

特定の時間単位の nth インスタンスを示します。時間の各クォンタムは独立して計算されます。たとえば、月フィールドに 4/3 が指定されている場合、データメトリック関数は4月、7月、および10月にスケジュールされます(つまり、年の4番目の月から始まる3か月ごと)。その後も同じスケジュールが維持されます。つまり、データメトリック関数は1月(10月の実行から3か月後)に実行されるようにスケジュールされては いません

注釈

  • cron式は現在、指定されたタイムゾーンに対してのみ評価します。アカウントの TIMEZONE パラメーター値を変更(またはユーザーレベルまたはセッションレベルで値を設定)しても、データメトリック関数のタイムゾーンは変更 されません

  • cron式は、データメトリック関数のすべての 有効な 実行時間を定義します。Snowflakeは、このスケジュールに基づいてデータメトリック関数を実行しようとします。ただし、次回の有効な実行時間が始まる前に以前の実行が完了していない場合、有効な実行時間はスキップされます。

  • cron式に特定の月の日と曜日の両方が含まれている場合、データメトリック関数は月の日または曜日の いずれか を満たす日にスケジュールされます。たとえば、 DATA_METRIC_SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC' は、月の10日から20日、およびそれらの日付以外の火曜日または木曜日の 0AM にデータメトリック関数をスケジュールします。

  • cronでの時間の最小粒度は分です。

    cron式で定義された分の間にデータメトリック関数が再開された場合、最初にスケジュールされたタスクの実行は、cron式のインスタンスの次回発生です。たとえば、毎日午前0時(USING CRON 0 0 * * *)に実行するようにスケジュールされたデータメトリック関数が、午前0時+5秒(00:00:05)に再開される場合、最初のタスクの実行は次の午前0時にスケジュールされます。

'TRIGGER_ON_CHANGES'

新しい行の挿入や行の削除など、 DML の操作 によりテーブルが変更される場合に、 DMF が実行されることを指定します。

以下のオブジェクトに対して 'TRIGGER_ON_CHANGES' を指定できます。

  • 動的テーブル

  • 外部テーブル

  • Apache Iceberg™ テーブル

  • 通常のテーブル

  • 仮テーブル

  • 一時テーブル

再クラスタリング の結果としてテーブルが変更される場合は、 DMF の実行をトリガーしません。

{ ADD | DROP } DATA METRIC FUNCTION metric_name

テーブルまたはビューに追加する、またはテーブルまたはビューからドロップするデータメトリック関数の識別子。

ON ( col_name [ , ... ] )

データメトリック関数を関連付けるテーブルまたはビュー列。列のデータ型は、データメトリック関数定義で指定された列のデータ型と一致しなければなりません。

[ , metric_name_2 ON ( col_name [ , ... ] ) [ , ... ] ]

テーブルまたはビューに追加するデータメトリック関数。各データメトリック関数とその指定列を区切るには、コンマを使用します。

MODIFY DATA METRIC FUNCTION metric_name

修正するデータメトリック関数の識別子。

ON ( col_name [ , ... ] ) { SUSPEND | RESUME }

指定した列のデータ測定機能を一時停止または再開します。データメトリック機能がテーブルまたはビューに設定されると、データメトリック機能は自動的にスケジュールに含まれます。

  • SUSPEND はスケジュールからデータメトリック関数を削除します。

  • RESUME は中断していた日付測定機能をスケジュールに戻します。

[ , metric_name_2 ON ( col_name [ , ... ] ) [ , ... ] { SUSPEND | RESUME } ]

中断または再開するための追加データ測定関数。各データメトリック関数とその指定列を区切るには、コンマを使用します。

こうしたアクションのアクセス制御要件の詳細については、 DMF権限 をご参照ください。

データガバナンス方針とタグアクション(dataGovnPolicyTagAction

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。

policy_name

ポリシーの識別子。スキーマに対して一意である必要があります。

以下の句は、テーブル、ビュー、イベントテーブルなど、行アクセスポリシーをサポートするすべての種類のテーブルに適用されます。簡略化するために、句は単に「テーブル」を指しています。

ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])

行アクセスポリシーをテーブルに追加します。

少なくとも1つの列名を指定する必要があります。追加の列は、各列名をコンマで区切って指定できます。この式を使用して、イベントテーブルと外部テーブルの両方に行アクセスポリシーを追加します。

DROP ROW ACCESS POLICY policy_name

テーブルから行アクセスポリシーをドロップします。

テーブルからポリシーをドロップするには、この句を使用します。

DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )

テーブルに設定されている行アクセスポリシーをドロップし、1つの SQL ステートメントで同じテーブルに行アクセスポリシーを追加します。

DROP ALL ROW ACCESS POLICIES

テーブルから すべて の行アクセスポリシーの関連付けをドロップします。

この式は、イベントテーブルからポリシーをドロップする 前に、スキーマから行アクセスポリシーをドロップするときに役立ちます。この式を使用して、テーブルから行アクセスポリシーの関連付けをドロップします。

SET AGGREGATION POLICY policy_name
[ ENTITY KEY (col_name [ , ... ]) ] [ FORCE ]

テーブルに 集計ポリシー を割り当てます。

オプションの ENTITY KEY パラメーターを使用して、テーブル内でエンティティを一意に識別する列を定義します。詳細については、 集計ポリシーによるエンティティレベルのプライバシーの実装 をご参照ください。

既存の集計ポリシーを新しい集計ポリシーにアトミックに置き換えるには、オプションの FORCE パラメーターを使用します。

UNSET AGGREGATION POLICY

テーブルから集計ポリシーをデタッチします。

{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )

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

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

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

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

FORCE

単一のステートメント内で、列に現在設定されているマスキングまたは投影ポリシーを別のポリシーに置き換えます。

マスキングポリシーで FORCE キーワードを使用するには、 ALTER TABLE ステートメント(つまり STRING)内のポリシーの データ型 が、列に現在設定されているマスキングポリシーのデータ型(つまり STRING)と一致している必要があります。

現在列にマスキングポリシーが設定されていない場合は、このキーワードを指定しても効果はありません。

詳細については、 列のマスキングポリシーを置き換える または 投影ポリシーの置き換え をご参照ください。

使用上の注意: 一般

  • ビューをマネージドアクセススキーマに(ALTER VIEW ... RENAME TO 構文を使用して)移動することは、ビューの所有者(つまり、ビューに対する OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き、禁止されています。

  • マスキングポリシーの場合、

    • USING 句と FORCE キーワードはどちらもオプションです。どちらも、列にマスキングポリシーを設定する必要はありません。 USING 句と FORCE キーワードは、個別にまたは一緒に使用できます。詳細については、以下をご参照ください。

    • テーブルの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のテーブルに適用できます。

    • マスキングポリシーを使用して1つ以上のテーブル列を変更する場合、または行アクセスポリシーを使用してテーブル自体を変更する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されているテーブルに対するクエリをシミュレートします。

  • ビューの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のビューに適用できます。

  • 行アクセスポリシーの場合、

    • Snowflakeは、単一の SQL ステートメントで行アクセスポリシーの追加とドロップをサポートしています。

      たとえば、テーブルにすでに設定されている行アクセスポリシーを別のポリシーに置き換えるには、最初に行アクセスポリシーをドロップしてから、新しい行アクセスポリシーを追加します。

    • 特定のリソース(つまり、テーブルまたはビュー)の場合、行アクセスポリシーを ADD または DROP するには、スキーマに対する APPLY ROW ACCESS POLICY 権限、 または リソースに対する OWNERSHIP 権限と行アクセスポリシーリソースに対する APPLY 権限が必要です。

    • テーブルまたはビューは、一度に1つの行アクセスポリシーでのみ保護できます。ポリシー本体が、行アクセスポリシーによって保護されているテーブルまたはビューの列、またはマスキングポリシーによって保護されている列を参照している場合、ポリシーの追加は失敗します。

      同様に、マスキングポリシー本体が、行アクセスポリシーまたは別のマスキングポリシーによって保護されているテーブルを参照している場合、テーブル列へのマスキングポリシーの追加は失敗します。

    • 行アクセスポリシーは、システムビューまたはテーブル関数には適用できません。

    • 他の DROP <オブジェクト> 操作と同様に、行アクセスポリシーが追加されていないリソースから行アクセスポリシーをドロップしようとすると、Snowflakeはエラーを返します。

    • オブジェクトに行アクセスポリシーと1つ以上のマスキングポリシーの両方がある場合は、行アクセスポリシーが最初に評価されます。

  • メタデータについて、

    注意

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

使用上の注意: データメトリック関数

DMF をテーブルに追加します。

テーブルにデータメトリック関数を追加する前に、以下を実行する必要があります。

  • データメトリック関数の実行スケジュールを設定します。詳細については、 DATA_METRIC_SCHEDULE をご参照ください。

  • データメトリック関数を呼び出した結果を格納するイベントテーブルを設定します。詳細については、 DMF結果を表示する をご参照ください。

  • 共有テーブルまたはビューにはデータメトリック関数を設定できないため、テーブルまたはビューが共有に付与されていないことを確認してください。

その他の情報は次のとおりです。

  • データメトリック関数はテーブル、外部ビュー、またはマテリアライズドビューに追加できます。動的テーブルなど、他の種類のテーブルにデータメトリック関数を設定することはできません。

  • 列を指定する場合、Snowflakeは順序位置を使用します。テーブルまたはビューにデータメトリック関数を追加した後に列の名前を変更しても、データメトリック関数と列の関連付けは有効です。

  • 1つの列に追加できるデータメトリック関数は1つのみです。たとえば、 NULL_COUNT データメトリック関数を単一の列に2回追加することはできません。

  • 列を参照するデータメトリック関数を追加した後に列をドロップすると、Snowflakeはデータメトリック関数を評価できません。

  • 仮想列の参照はサポートされていません。

テーブルから DMF をドロップします。
  • DROP FUNCTION コマンドを使用してシステムからデータメトリック関数を削除する前に、テーブルからデータメトリック関数をドロップします。

  • DATA_METRIC_FUNCTION_REFERENCES 関数を使用すると、データメトリック関数が設定されているテーブルオブジェクトとビューオブジェクトを識別できます。

DMF をスケジュールします

スケジュールが設定されてから有効になるまでに10分かかります。

同様に、 DMF の設定が解除されスケジューリングの変更が有効になるまでに10分かかります。詳細については、 実行するDMFsをスケジュールする をご参照ください。

ビューの名前を view1 から view2 に変更する。

ALTER VIEW view1 RENAME TO view2;
Copy

ビューをセキュアビューに変換する。

ALTER VIEW view1 SET SECURE;
Copy

セキュアビューを通常のビューに戻す。

ALTER VIEW view1 UNSET SECURE;
Copy

列レベルのセキュリティマスキングポリシーをビュー列に適用する。

-- single column

ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v;

-- multiple columns

ALTER VIEW user_info_v MODIFY
    COLUMN ssn_number SET MASKING POLICY ssn_mask_v
  , COLUMN dob SET MASKING POLICY dob_mask_v
;
Copy

ビュー列から列レベルのセキュリティマスキングポリシーを設定解除する。

-- single column

ALTER VIEW user_info_v modify column ssn_number unset masking policy;

-- multiple columns

ALTER VIEW user_info_v modify
    column ssn_number unset masking policy
  , column dob unset masking policy
;
Copy

次の例では、ビューに行アクセスポリシーを追加します。ポリシーを設定した後、 Information Schema を確認することで検証できます。

alter view v1
  add row access policy rap_v1 on (empl_id);
Copy

次の例では、ビューから行アクセスポリシーをドロップします。 Information Schema にクエリを実行して、ポリシーがドロップされたことを検証します。

alter view v1
  drop row access policy rap_v1;
Copy

次の例は、ビューの単一のSQLステートメントで行アクセスポリシーの追加とドロップを組み合わせる方法を示しています。 Information Schema を確認して結果を検証します。

alter view v1
  drop row access policy rap_v1_version_1,
  add row access policy rap_v1_version_2 on (empl_id);
Copy