CREATE AGGREGATION POLICY

現在または指定のスキーマに新しい 集計ポリシー を作成するか、既存の集計ポリシーを置き換えます。

集計ポリシーを作成したら、 ALTER TABLE コマンドを使用して集計ポリシーをテーブルに割り当てるか、 ALTER VIEW コマンドを使用してビューに割り当てます。

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

集計ポリシー DDL 参照

構文

CREATE [ OR REPLACE ] AGGREGATION POLICY [ IF NOT EXISTS ] <name>
  AS () RETURNS AGGREGATION_CONSTRAINT -> <body>
  [ COMMENT = '<string_literal>' ]
Copy

パラメーター

name

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

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

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

body

集計ポリシーの制限を決定する SQL 式。

集計ポリシーの制約を定義するには、 SQL 式を使用して以下の内部関数を1つ以上呼び出します。

NO_AGGREGATION_CONSTRAINT

ポリシー本体がこの関数から値を返す場合、クエリは集計制約付きテーブルまたはビューから制限なしでデータを返すことができます。たとえば、管理者が集計制約付きテーブルまたはビューから集計されていない結果を取得する必要がある場合、ポリシーの本体でこの関数を呼び出すことができます。

引数なしで NO_AGGREGATION_CONSTRAINT を呼び出します。

AGGREGATION_CONSTRAINT

ポリシー本体がこの関数から値を返す場合、結果を返すにはクエリでデータを集計する必要があります。MIN_GROUP_SIZE 引数を使用して、各集計グループに含める必要がある記録の数を指定します。

AGGREGATION_CONSTRAINT 関数の構文は次のとおりです。

AGGREGATION_CONSTRAINT ( MIN_GROUP_SIZE => <integer_expression> )
Copy

条件:

MIN_GROUP_SIZE => integer_expression

集計制約のあるテーブルまたは表示に対するクエリによって返されるグループに含める必要のある行 または エンティティ の数を指定します。

関数への引数として 10 を渡すことには違いがあります。どちらも結果を集計する必要があります。

  • 1 を渡すには、各集計グループに集計制約付きテーブルからの記録が少なくとも1つ含まれていることも必要です。したがって外部結合では、集計制約付きテーブルの少なくとも1つの記録が、保護されていないテーブルの記録と一致する必要があります。

  • 0 を渡すと、クエリは別のテーブルの記録のみで構成されるグループを返すことができます。したがって、集計制約付きテーブルと保護されていないテーブル間の外部結合では、グループは集計制約付きテーブルのどの記録とも一致しない保護されていないテーブルの記録で構成される可能性があります。

ポリシーの本文では、ユーザー定義の関数、テーブル、ビューを参照することはできません。

COMMENT = 'string_literal'

集計ポリシーのコメントを追加するか、既存のコメントを上書きします。

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

注意

CREATE AGGREGATION POLICY

スキーマ

スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する 任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対するCREATE権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対するUSAGE*も*付与されている必要はありません。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

集計ポリシー DDL と権限の詳細については、 権限とコマンド をご参照ください。

使用上の注意

  • 既存の集計ポリシーを更新し、現在のポリシー本文を確認する必要がある場合は、 DESCRIBE AGGREGATION POLICY コマンドまたは GET_DDL 関数を実行します。

  • メタデータについて:

    注意

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

  • OR REPLACEIF NOT EXISTS 句は互いに排他的です。両方を同じステートメントで使うことはできません。

  • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

クエリが5行以上のグループを返すことをリクエストする集計ポリシーを作成します。

CREATE AGGREGATION POLICY my_policy AS ()
  RETURNS AGGREGATION_CONSTRAINT ->
  AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
Copy

ロール admin を持つユーザーが集計されていない結果を返すことを許可し、他のすべてのクエリが5行以上のグループを返すことをリクエストする集計ポリシーを作成します。

CREATE AGGREGATION POLICY my_policy AS ()
  RETURNS AGGREGATION_CONSTRAINT ->
    CASE
      WHEN CURRENT_ROLE() = 'ADMIN'
        THEN NO_AGGREGATION_CONSTRAINT()
      ELSE AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5)
    END;
Copy