CREATE AGGREGATION POLICY¶
現在または指定のスキーマに新しい 集計ポリシー を作成するか、既存の集計ポリシーを置き換えます。
集計ポリシーを作成したら、 ALTER TABLE コマンドを使用して集計ポリシーをテーブルに割り当てるか、 ALTER VIEW コマンドを使用してビューに割り当てます。
- こちらもご参照ください。
構文¶
CREATE [ OR REPLACE ] AGGREGATION POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS AGGREGATION_CONSTRAINT -> <body>
[ COMMENT = '<string_literal>' ]
パラメーター¶
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> )
ここで、
integer_expression
は ポリシーの最小グループサイズ に解決されます。関数への引数として
1
と0
を渡すことには違いがあります。どちらも結果を集計する必要があります。1
を渡すには、各集計グループに集計制約付きテーブルからの記録が少なくとも1つ含まれていることも必要です。したがって外部結合では、集計制約付きテーブルの少なくとも1つの記録が、保護されていないテーブルの記録と一致する必要があります。0
を渡すと、クエリは別のテーブルの記録のみで構成されるグループを返すことができます。したがって、集計制約付きテーブルと保護されていないテーブル間の外部結合では、グループは集計制約付きテーブルのどの記録とも一致しない保護されていないテーブルの記録で構成される可能性があります。
ポリシーの本文では、ユーザー定義の関数、テーブル、ビューを参照することはできません。
COMMENT = 'string_literal'
集計ポリシーのコメントを追加するか、既存のコメントを上書きします。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE AGGREGATION POLICY |
スキーマ |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
集計ポリシー DDL と権限の詳細については、 権限とコマンド をご参照ください。
使用上の注意¶
既存の集計ポリシーを更新し、現在のポリシー本文を確認する必要がある場合は、 DESCRIBE AGGREGATION POLICY コマンドまたは GET_DDL 関数を実行します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
クエリが5行以上のグループを返すことをリクエストする集計ポリシーを作成します。
CREATE AGGREGATION POLICY my_policy AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
ロール 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;