集計ポリシー¶
集計ポリシーは、テーブルまたはビューのデータにアクセスできるクエリの種類を制御する、スキーマレベルのオブジェクトです。集計ポリシーがテーブルに適用されている場合、そのテーブルに対するクエリは、結果を返すためにデータを最小サイズのグループに集計する必要があり、それによってクエリが個々の記録から情報を返すことを防ぎます。集計ポリシーが割り当てられたテーブルまたはビューは、 集計制約付き であると言われます。
集計ポリシーは、エンティティキーの有無にかかわらず使用できます。集計ポリシーがエンティティキーなしで使用される場合、データセット内の個々の行のプライバシー(つまり、行レベルのプライバシー)が保護されます。エンティティキーで集計ポリシーを使用すると、そのエンティティに関する情報が複数の行に表示される場合でも、エンティティのプライバシー(つまり、エンティティレベルのプライバシー)が保護されます。
集計ポリシーとエンティティキーの組み合わせの詳細については、 集計ポリシーによるエンティティレベルのプライバシーの実装 をご参照ください。
概要¶
Snowflakeのコア機能は、データセットを他のエンティティと共有できることです。集計ポリシーにより、プロバイダー(データ所有者)は、データがコンシューマーと共有された後でも、そのデータで実行できる内容を制御できます。具体的には、プロバイダーはテーブルのコンシューマーに対して、個々の記録を取得するのではなく、データを集計することを要求できます。
集計ポリシーを作成するとき、プロバイダ-のポリシー管理者は、最小グループサイズ(つまり、グループに集計する必要がある行の数)を指定します。最小グループサイズが大きければ大きいほど、コンシューマーがクエリ結果を使用して1つの記録の内容を推測できる可能性が低くなります。集計ポリシーがテーブルまたはビューに適用されると、それに対するクエリは2つの要件に従う必要があります。
- クエリはデータを集計する必要があります。クエリが集計関数を使用する場合、 許可された集計関数 の1つである必要があります。 
- クエリによって作成される各グループには、少なくともX個の記録の集計が含まれている必要があります。ここで、Xは集計ポリシーの最小グループサイズです。 
クエリが、ポリシーの最小グループサイズよりも少ない記録を含むグループを返す場合、Snowflakeはそれらのグループを 剰余グループ に結合します。Snowflakeは適切な列に集計関数を適用し、剰余グループの値を返します。ただし、その値は複数のグループに属する行から計算されるため、 GROUP BY キー列の値は NULL になります。たとえば、クエリに GROUP BY state 句が含まれている場合、剰余グループの state の値は NULL になります。
剰余グループに入力するのに十分な結果を返さないクエリでも機能しますが、結果のすべてのフィールドに NULL 値が返されます。
制限事項¶
- 集計ポリシーで外部テーブルを保護することはできません。 
- クエリが明示的なグループ化構文を使用する場合は、 GROUP BY 句である必要があります。クエリは GROUP BY ROLLUP、 GROUP BY CUBE、または GROUP BY GROUPING SETS のような関連する構文を使用できません。 
- ほとんどの セット演算子 は、クエリの1つが集計制約付きテーブルに作用する場合、許可されません。例外として UNION ALL がサポートされますが、各結果グループはクエリされる集計制約付きテーブルの最小グループサイズを満たす必要があります(詳細については クエリの要件 をご参照ください)。 
- 集計制約付きテーブルの列が 投影ポリシー で保護されている場合、そのテーブルに対するクエリでは、列を COUNT 関数の引数として使用できません。 
- 再帰 CTEs は、集計制約付きテーブルまたはビューに対するクエリでは使用できません。 
- ウィンドウ関数 は、集計制約付きテーブルまたはビューに対するクエリでは使用できません。 
- 集計ポリシーの要件を満たすクエリの部分への参照またはクエリの部分からの参照がある場合、集計制約付きテーブルに対するクエリでは 相関サブクエリ または ラテラル結合 を使用できません。次の例は、禁止されているクエリの種類を示しています。 - 例1
- protected_tableが集計制約付きであると仮定すると、データを集計するクエリの部分がサブクエリ外のクエリの別の部分を参照するため、次のクエリは許可されません。- SELECT c1, c2 FROM open_table WHERE c1 = (SELECT x FROM protected_table WHERE y = open_table.c2); 
- 例2
- protected_tableが集計制約付きであると仮定すると、サブクエリは、サブクエリの外側にあるデータを集計するクエリの部分を参照するため、次のクエリは許可されません。- SELECT SUM(SELECT COUNT(*) FROM open_table ot WHERE pt.id = ot.id) FROM protected_table pt; 
 
考慮事項¶
集計ポリシーを使用して機密データを保護する場合は、次の点を考慮してください。
- 集計ポリシーは、エンティティではなく、個々の記録のデータを保護します。データセットに、同じエンティティに属する複数の記録が含まれている場合、集計ポリシーはエンティティ全体ではなく、そのエンティティに関連する特定の記録のプライバシーのみを保護します。 
- 集計ポリシーにより個々の記録へのアクセスは制限されますが、悪意のある攻撃者が意図的なクエリを使用して、集計制約付きテーブルから潜在的に機密性の高いデータを取得できないことを保証するものではありません。十分な数のクエリ試行により、悪意のある攻撃者が集計要件を回避して個々の行からの値を確認できる可能性はあります。集計ポリシーは、既に一定の信頼関係があるパートナーや顧客との使用に最適です。さらに、プロバイダーは、データ悪用の可能性(リストへのアクセス履歴の確認など)にも注意する必要があります。 
集計ポリシーを作成する¶
集計ポリシーを作成するための構文は次のとおりです。
CREATE [ OR REPLACE ] AGGREGATION POLICY <name> AS () RETURNS AGGREGATION_CONSTRAINT -> <body> [ COMMENT = '<string_literal>' ];
条件:
- nameはポリシーの名前を指定します。
- AS () RETURNS AGGREGATION_CONSTRAINTはポリシーの署名と戻り型です。署名は引数を受け入れず、戻り型は内部データ型である AGGREGATION_CONSTRAINT です。すべての集計ポリシーは、同じ署名と戻り型を持ちます。
- bodyは、集計ポリシーの制限を決定する SQL 式です。
本体から関数を呼び出す¶
集計ポリシーの本体は、ポリシーの制約を定義するために NO_AGGREGATION_CONSTRAINT および AGGREGATION_CONSTRAINT の2つの関数を使用します。本体の条件がこれらの関数のいずれかを呼び出す場合、関数からの戻り値によって、集計制約付きテーブルまたはビューに対するクエリをどのように作成して結果を返す必要があるかが決まります。
- NO_AGGREGATION_CONSTRAINT
- 集計ポリシーが割り当てられているテーブルまたはビューにクエリが無制限にアクセスできるようにしたい場合は、本文の式を使用してNO_AGGREGATION_CONSTRAINT関数を呼び出します。 
- AGGREGATION_CONSTRAINT
- 本文の式を使用してAGGREGATION_CONSTRAINT関数を呼び出し、クエリがデータを集計して結果を返すようにします。MIN_GROUP_SIZE 引数を使用して、各集計グループに含める必要がある行または エンティティ の数を指定します。 
NO_AGGREGATION_CONSTRAINT および AGGREGATION_CONSTRAINT 関数の完全な構文については、 CREATE AGGREGATION POLICY をご参照ください。
注釈
集計ポリシーの本体では、ユーザー定義関数、テーブル、またはビューを参照できません。
ポリシーの例¶
- 固定された最小グループサイズ
- もっとも単純な集計ポリシーは AGGREGATION_CONSTRAINT 関数を直接呼び出し、テーブルに対するすべてのクエリに適用される一定の最小グループサイズを定義します。たとえば、次のコマンドは最小グループサイズが5の集計ポリシーを作成します。 - CREATE AGGREGATION POLICY my_agg_policy AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5); 
- 条件付きポリシー
- ポリシー管理者は、集計ポリシーの SQL 式を定義して、クエリを実行するユーザーの役割などの要素に基づいて、さまざまなクエリにさまざまな制限を適用できます。この戦略により、1人のユーザーは制限なくテーブルをクエリし、他のユーザーには結果を集計するように要求できます。 - たとえば、次の集計ポリシーでは、 - ADMINのロールを持つユーザーにテーブルへの無制限のアクセス権が付与されますが、他のすべてのクエリではデータを少なくとも5つの行またはエンティティのグループに集計する必要があります。- CREATE AGGREGATION POLICY my_agg_policy AS () RETURNS AGGREGATION_CONSTRAINT -> CASE WHEN CURRENT_ROLE() = 'ADMIN' THEN NO_AGGREGATION_CONSTRAINT() ELSE AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5) END; - Tip - 条件付きポリシーで CURRENT_ROLE のようなコンテキスト関数を使用する場合、次の戦略を使用できます。 - コンテキスト関数は文字列を返すので、それを使った比較では大文字と小文字が区別されます。大文字小文字を区別せずに比較する場合は、 LOWER を使って文字列をすべて小文字に変換することができます。 
- POLICY_CONTEXT 関数は、コンテキスト関数が特定の値を返すときに、ポリシー本体が正しい値を返しているかどうかを評価するのに役立ちます。POLICY_CONTEXT関数は、1つ以上のコンテキスト関数の指定値に基づいてクエリ結果をシミュレートします。 
 
集計ポリシーを変更する¶
ALTER AGGREGATION POLICY コマンドを使用して、集計ポリシーの最小グループサイズを決定する SQL 式を変更できます。ポリシーの名前、またはそのコメントも変更できます。
集計ポリシーを変更する前に、 DESCRIBE AGGREGATION POLICY コマンドまたは GET_DDL 関数を実行して、ポリシーの現在の SQL 式を確認できます。最小グループサイズを決定する SQL 式は、 BODY 列に表示されます。
例として、次のコマンドを実行して、集計ポリシー my_policy の SQL 式を変更し、すべての状況で最小グループサイズが2行になるようにできます。
ALTER AGGREGATION POLICY my_policy SET BODY -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE=>2);
集計ポリシーを割り当てる¶
集計ポリシーを作成すると、1つ以上のテーブルまたはビューに適用して、集計制約を設定できます。テーブルまたはビューには、集計ポリシーを1つだけ関連付けることができます。
既存のテーブルまたはビューに集計ポリシーを割り当てるには、 ALTER TABLE コマンドまたは ALTER VIEW コマンドの SET AGGREGATION POLICY 句を使用します。
ALTER { TABLE | VIEW } <name> SET AGGREGATION POLICY <policy_name> [ FORCE ]
条件:
- nameはテーブルまたはビューの名前を指定します。
- policy_nameは集計ポリシーの名前を指定します。
- FORCEはオプションのパラメーターで、すでに集計ポリシーが割り当てられているテーブルまたはビューにコマンドで集計ポリシーを割り当てることができます。新しい集計ポリシーは、既存のポリシーを自動的に置き換えます。
たとえば、ポリシー my_agg_policy をテーブル t1 に割り当てるには、次を実行します。
ALTER TABLE t1 SET AGGREGATION POLICY my_agg_policy;
CREATE TABLE および CREATE VIEW コマンドの WITH 句を使用して、作成時にテーブルまたはビューに集計ポリシーを割り当てることもできます。たとえば、ポリシー my_agg_policy を新しいテーブルに割り当てるには、次を実行します。
CREATE TABLE t1 WITH AGGREGATION POLICY my_agg_policy;
集計ポリシーを置き換える¶
集計ポリシーを置き換える場合は、 FORCE パラメーターを使用して既存の集計ポリシーをデタッチし、1つのコマンドで新しい集計ポリシーを割り当てる方法が推奨されます。この方法により、保護にギャップが残らないように、古いポリシーを自動的に置き換えることができます。
たとえば、すでに集計制約が設定されているテーブルに新しい集計ポリシーを割り当てるには、次のようにします。
ALTER TABLE privacy SET AGGREGATION POLICY agg_policy_2 FORCE;
1つのステートメント(... UNSET AGGREGATION POLICY)でテーブルまたはビューから集計ポリシーをデタッチし、別のステートメント(... SET AGGREGATION POLICY <name>)でテーブルまたはビューに新しいポリシーを設定することもできます。この方法を選択した場合、1つのポリシーをデタッチして別のポリシーを割り当てるまでの間、テーブルは集計ポリシーによって保護されません。この間にクエリが機密データにアクセスする可能性があります。
集計ポリシーのデタッチ¶
データを集計する必要性をなくすために、テーブルまたはビューから集計ポリシーをデタッチするには、 ALTER TABLE または ALTER VIEW コマンドの UNSET AGGREGATION POLICY 句を使用します。テーブルまたはビューには複数の集計ポリシーを関連付けることができないため、集計ポリシーの名前は必要ありません。
ALTER {TABLE | VIEW} <name> UNSET AGGREGATION POLICY
条件:
- nameはテーブルまたはビューの名前を指定します。
たとえば、ビュー v1 から集計ポリシーをデタッチするには、次を実行します。
ALTER VIEW v1 UNSET AGGREGATION POLICY;
集約ポリシーを Snowsight で表示します。¶
テーブルまたはビューに集約ポリシーがあるかどうかを判断するには、以下の手順を実行します。
- Snowsight にサインインします。 
- ナビゲーションメニューで、Catalog » Database Explorer を選択してから、テーブルまたはビューを選択します。 
- Table Details タブで Policies セクションを見つけて集約ポリシーを探します。 
- 集約ポリシーの最小グループサイズを確認するには、 Minimum Group Size フィールドを探します。ポリシーの本文が複雑で、条件によって最小グループサイズが異なる場合、数値の代わりに - Case dependentが表示されます。複雑な本文の場合、集約ポリシーの名前の上にカーソルを置くとその本文が表示されるため、最小グループサイズを判断する場合に役立ちます。
- 結合してエンティティキーを構成しているテーブルの列を特定するには、 Entity Key Columns フィールドを見つけます。テーブルまたはビューに複数のエンティティ キーがある場合、ポリシーは Policies セクションで複数回、各エンティティキーごとに表示されます。 
集計ポリシーをモニターする¶
集計ポリシーの使用状況をモニターする方法を決定するには、2つの一般的なアプローチを検討すると役立ちます。
集計ポリシーを見つける¶
共有 SNOWFLAKE データベースのAccount Usageスキーマで AGGREGATION_POLICIES ビューを使用できます。このビューは、Snowflakeアカウント内にあるすべての集計ポリシーの カタログ です。例:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.AGGREGATION_POLICIES ORDER BY POLICY_NAME;
集計ポリシーの参照を特定する¶
POLICY_REFERENCES Information Schemaテーブル関数は、集計ポリシーの参照を識別できます。2つの異なる構文オプションがあります。
- 指定された集計ポリシーが設定されている各オブジェクト(テーブルまたはビュー)の行を返します。 - USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(policy_name => 'my_db.my_schema.aggpolicy')); 
- my_tableという名前のテーブルに割り当てられた各ポリシーの行を返します。- USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table')); 
クエリの要件¶
集計ポリシーがテーブルまたはビューに適用された後、そのテーブルまたはビューに対するクエリは特定の要件に準拠する必要があります。このセクションでは、集計制約付きテーブルまたはビューに対するクエリで許可される内容と許可されない内容について説明します。
注釈
クエリの一部が集計ポリシーの要件を満たすようにデータを適切に集計すると、これらのクエリ制限は適用されなくなり、クエリの別の部分には、それ以外では禁止されているものを含めることができます。
たとえば、次のクエリでは、クエリの別の部分が protected_table に割り当てられているポリシーの集計要件をすでに満たしているため、結果を集計しない SELECT ステートメントを使用できます。
SELECT * FROM open_table ot WHERE ot.a > (SELECT SUM(id) FROM protected_table pt)
クエリに含めることができるその他の制限については、 制限事項 をご参照ください。
- 集計関数
- 集計制約付きテーブルに対するクエリでは、次の集計関数を使用できます。 - クエリには、許可されている集計関数を複数含めることができます。許可されていない集計関数を使用しようとすると、クエリは失敗します。 - 集約関数内で前処理関数を使用する場合は、以下の前処理関数のみがサポートされています。 - つまり、例えば、 - SELECT myfunc(C1), COUNT(C2) FROM t1 GROUP BY 1;は有効です。集約ポリシーのトップレベルでは、集約以外の関数がサポートされているからです。
- SELECT C1, COUNT(myfunc(C2)) FROM t1 GROUP BY 1;は無効です。集約ポリシーの集約関数内では、上記に記載した関数しかサポートされないためです。
 
- ステートメントをグループ化する
- 集計制約付きテーブルに対するクエリは、データを最小サイズのグループに集計する必要があります。明示的なステートメントのグループ化(すなわちGROUP BY句)またはデータセット全体を集約するスカラー集約関数( - COUNT(*)など)を使用することができます。
- Filters
- 一般的に、Snowflakeは、フィルターによって選択された行を集計する限り、クエリが WHERE 句と ON 句を使用して集計制約付きテーブルをフィルタリングする方法を制限しません。 
- 結合
- クエリでは、集計制約付きテーブルを別のテーブル(別の集計制約付きテーブルを含む)と結合できます。 - Snowflakeは、集計制約付きテーブルから取得した行数が、そのテーブルの最小グループサイズ以上であることを確認するために、各集計グループをチェックします。たとえば、最小グループサイズが5の集計制約付きテーブル - table_aを最小グループサイズが3の- table_bと結合する場合、クエリによって返される各グループは、少なくとも- table_aの5行と- table_bの3行を使用して作成する必要があります。- 結合を含むクエリが集計制約テーブルの要件を満たすかどうかは、グループのサイズではなく、テーブルから取り出した行の数に応じて決まります。その結果、結合データから作成されるグループのサイズは、集計制約付きテーブルの最小グループサイズよりも大きくなる可能性がありますが、それでもデータはフィルター処理されます。たとえば、次の場合を考えます。 - agg_tは最小グループサイズ2で集計制約があります。このテーブルには、次の内容を持つ単一の整数列- cが含まれています: {- 1,- 2,- 2}。
- open_tは制約がなく、次の内容の整数列- cが含まれています: {- 1,- 1,- 1,- 2}。
 - ユーザーは、2つのテーブルを結合する次のクエリを実行します。 - SELECT c, COUNT(*) FROM agg_t, open_t WHERE agg_t.c = open_t.c GROUP BY agg_t.c; - クエリは次を返します。 - +-----------------+ | c | COUNT(*) | |------+----------| | 2 | 2 | |------+----------| | null | 3 | +-----------------+ - 2番目のグループには3つの記録があり、これは最小グループサイズより大きいですが、それらの記録はすべて集計制約付きテーブル内の1つの記録に対応しているため、値はフィルター処理されます。 
- UNION ALL
- クエリでは、クエリ対象の1つ以上のテーブルに集計制約がある場合でも、 UNION ALL を使用して、2つのサブクエリの結果を結合できます。結合と同様に、結果の各グループは、クエリされるすべての集計制約付きテーブルの最小グループサイズを満たす必要があります。たとえば、次の場合を考えます。 - テーブル - protected_table1の最小グループサイズは2です。
- テーブル - protected_table2の最小グループサイズは5です。
 - クエリを実行すると、次のようになります。 - SELECT a, COUNT(*) FROM ( SELECT a, b FROM protected_table1 UNION ALL SELECT a, b FROM protected_table2 ) GROUP BY a; - キー - aによって形成される各グループは、- protected_table1からの2つの記録と- protected_table2からの5つの記録が含まれている必要があります。それ以外の場合、記録は剰余グループに配置されます。
- 外部関数
- クエリの別の部分で集計制約付きテーブルの要件を満たす結果が適切に集計されていない限り、クエリは 外部関数 を呼び出すことはできません。 
- ロギングとメトリック
- クエリは、 UDF ログ記録またはメトリックを介して集計制約付きテーブルの列をログに記録することはできません。 
- データ型の変換
- SELECT ステートメントにデータ型変換関数を含むクエリでは、 TRY バージョンの関数を使用する必要があります。たとえば、 TRY_CAST 関数は許可されていますが、 CAST 関数は禁止されています。数値型では次のデータ型変換関数が許可されます。 
- PIVOT
- クエリでは、集計制約付きテーブルの列に対して PIVOT 演算子を使用することはできません。 
拡張例¶
集計ポリシーをテーブルに割り当てるには、マスキングポリシーや投影ポリシーなどの他のポリシーを作成して割り当てる場合と同じ、一般的な手順に従います。
- 集中管理アプローチを使用している場合は、ポリシーを管理するためのカスタムロール(例: - agg_policy_admin)を作成します。または、既存のロールを使用できます。
- このロールに、集計ポリシーを作成および割り当てる権限を付与します。 
- 集計ポリシーを作成します。 
- 集計ポリシーをテーブルに割り当てます。 
集計ポリシーがテーブルに割り当てられると、テーブルに対する正常なクエリではそのデータの集計が必要になります。
次の拡張例では、プロバイダーのアクセス制御管理者がカスタムロールを作成することから、データコンシューマーがクエリを実行して集計結果を返すまで、このプロセスの各ステップについて詳しく説明します。
- アクセス制御管理者のタスク
- 集計ポリシーを管理するためのカスタムロールを作成します。既存のロールを再利用することもできます。 - USE ROLE USERADMIN; CREATE ROLE AGG_POLICY_ADMIN; 
- スキーマに集計ポリシーを作成し、Snowflakeアカウントのテーブルまたはビューに集計ポリシーを割り当てる権限を - agg_policy_adminカスタムロールに付与します。- このステップでは、集計ポリシーが - privacy.agg_policiesという名前のデータベースとスキーマに保存され、このデータベースとスキーマがすでに存在していることを前提としています。- GRANT USAGE ON DATABASE privacy TO ROLE agg_policy_admin; GRANT USAGE ON SCHEMA privacy.agg_policies TO ROLE agg_policy_admin; GRANT CREATE AGGREGATION POLICY ON SCHEMA privacy.agg_policies TO ROLE agg_policy_admin; GRANT APPLY AGGREGATION POLICY ON ACCOUNT TO ROLE agg_policy_admin; - agg_policy_adminロールを1人以上のユーザーに割り当てることができるようになりました。- 集計ポリシーを操作するために必要な権限の詳細については、 権限とコマンド (このトピック内)をご参照ください。 
 
- 集計ポリシー管理者のタスク
- 集計を要求する集計ポリシーを作成し、最小グループサイズを3に定義します。 - USE ROLE agg_policy_admin; USE SCHEMA privacy.agg_policies; CREATE AGGREGATION POLICY my_policy AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 3); 
- 集計ポリシーをテーブル - t1に割り当てます。- ALTER TABLE t1 SET AGGREGATION POLICY my_policy; 
 
- コンシューマークエリ
- プロバイダーが集計制約付きテーブルを共有すると、データコンシューマーはそのテーブルに対してクエリを実行できます。この例では、集計制約付きテーブル - t1に次の行が含まれていると仮定します。- peak - state - elevation - washington - NH - 6288 - cannon - NH - 4080 - kearsarge - NH - 2937 - mansfield - VT - 4395 - killington - VT - 4229 - wachusett - MA - 2006 - ここで、コンシューマーが - t1に対して次のクエリを実行すると仮定します。- SELECT state, AVG(elevation) AS avg_elevation FROM t1 GROUP BY state; - 結果は次のとおりです。 - +----------+-----------------+ | STATE | AVG_ELEVATION | |----------+-----------------+ | NH | 4435 | | NULL | 3543 | +----------+-----------------+ - 2つ目のグループの - stateの値は- NULLであることに注意してください。これは- VTと- MAの両方のピークの上昇を平均した剰余グループであるからです。
Snowflake機能を使用した集計ポリシー¶
以下のサブセクションでは、集計ポリシーがさまざまなSnowflake機能やサービスとどのように相互作用するかを簡単に説明します。
その他のポリシー¶
このセクションでは、 マスキングポリシー、 行アクセスポリシー、 投影ポリシー などの他のポリシーと集計ポリシーがどのように相互作用するかを説明します。
集計制約付きテーブルに他のポリシーを関連付けることができます。テーブルに対する正常なクエリは、すべてのポリシーの要件を満たす必要があります。
行アクセスポリシーが集計制約付きテーブルに割り当てられている場合、行アクセスポリシーに基づいてクエリ結果から除外された行は、集計結果の計算時に含まれません。
マスキングポリシー、行アクセスポリシー、投影ポリシーの本体では、その列を含め、集計制約付きテーブルを参照できません。同様に、他のポリシーの本体には、集計制約付きテーブルを参照する UDF を含めることはできません。
ビューおよびマテリアライズドビュー¶
集計ポリシーは、ビューとマテリアライズドビューの両方に割り当てることができます。集計ポリシーがビューに適用されると、基になるテーブルは集計制約を受けなくなります。このベーステーブルは、引き続き制限なくクエリできます。
機密データが公開される可能性を回避するために、集計制約付きのすべてのビューは、そうでない場合であっても、 セキュアビュー であるかのように扱われます。
集計制約付きテーブルからビューを作成できるかどうかは、ビューのタイプに応じて異なります。
1つ以上の集計制約付きテーブルから通常のビューを作成できますが、そのビューに対するクエリでは、それらのベーステーブルの制約を満たす方法でデータを集計する必要があります。
集計制約付きテーブルまたはビューに基づいてマテリアライズドビューを作成することはできません。また、マテリアライズドビューの基になるテーブルまたはビューに集計ポリシーを割り当てることもできません。
クローンされたオブジェクト¶
次のアプローチは、クローンされたデータベースまたはスキーマに格納されているクローンされたテーブルまたはビューの SELECT 権限を持つユーザーからデータを保護するのに役立ちます。
- 個別の集計ポリシーオブジェクトのクローニングはサポートされていません。 
- データベースをクローニングすると、データベース内のすべての集計ポリシーがクローニングされます。 
- スキーマをクローニングすると、スキーマ内のすべての集計ポリシーがクローニングされます。 
- クローンされたテーブルは、ソーステーブルと同じ集計ポリシーにマップされます。 - テーブルがその親スキーマクローニングのコンテキストでクローンされるときに、同じ親スキーマの集計ポリシーへの参照(つまり、ローカル参照)がソーステーブルにあると、クローンされたテーブルはクローンされたポリシーへの参照を持つようになります。 
- ソーステーブルが別のスキーマの集計ポリシー(外部参照など)を参照している場合、複製されたテーブルは外部参照を保持します。 
 
詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。
複製¶
集計ポリシーとその割り当ては、データベース複製と複製グループを使用して複製できます。
データベース複製 の場合は、次のいずれかの条件に該当すると、複製操作に失敗します。
- プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、ポリシーを含んでいるが、下位エディションには、複製の承認されたアカウントが1つ以上ある。 
- プライマリデータベースに含まれるテーブルまたはビューには、別のデータベースにある集計ポリシーへの ダングリングリファレンス がある。 
複製グループ で複数のデータベースを複製すると、データベース複製のダングリングリファレンス動作を回避できます。
権限とコマンド¶
次のサブセクションでは、集計ポリシーの管理に役立つ情報を提供します。
集計ポリシーの権限¶
Snowflakeは、集計ポリシーオブジェクトに対して次の権限をサポートしています。
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対する CREATE 権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対する USAGE も 付与されている必要はありません。
| 権限 | 使用状況 | 
|---|---|
| APPLY | テーブルの集計ポリシーの設定および設定解除操作を有効にします。 | 
| OWNERSHIP | 集計ポリシーの所有権を譲渡し、集計ポリシーに対する完全な制御を許可します。集計ポリシーのほとんどのプロパティを変更するために必要です。 | 
詳細については、このトピックの DDL コマンド、操作、および権限の概要 をご参照ください。
集計ポリシー DDL 参照¶
Snowflake は、集計ポリシーを作成および管理するために次の DDL をサポートしています。
DDL コマンド、操作、および権限の概要¶
次のテーブルは、集計ポリシー権限と DDL 操作の関係をまとめたものです。
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対する CREATE 権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対する USAGE も 付与されている必要はありません。
| 操作 | 必要な権限 | 
|---|---|
| 集計ポリシーを作成します。 | 同じスキーマ内の CREATE AGGREGATION POLICY 権限を持つロール。 | 
| 集計ポリシーを変更します。 | 集計ポリシーに対する OWNERSHIP 権限を持つロール。 | 
| 集計ポリシーを記述します | 次のいずれかを使用します。 
 | 
| 集計ポリシーをドロップします。 | 集計ポリシーに対する OWNERSHIP 権限を持つロール。 | 
| 集計ポリシーを表示します。 | 次のいずれかを使用します。 
 | 
| テーブルの集計ポリシーを設定または設定解除します。 | 次のいずれかを使用します。 
 | 
Snowflakeは、オブジェクトに集計ポリシーを作成および設定するためのさまざまなアクセス権限をサポートしています。
- aggregation_policy_adminカスタムロールが すべての テーブルに集計ポリシーを作成および設定する集中型の集計ポリシー管理アプローチの場合は、次の権限が必要です。- USE ROLE securityadmin; GRANT USAGE ON DATABASE mydb TO ROLE aggregation_policy_admin; GRANT USAGE ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin; GRANT CREATE AGGREGATION POLICY ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin; GRANT APPLY ON AGGREGATION POLICY ON ACCOUNT TO ROLE aggregation_policy_admin; 
- ハイブリッド型管理アプローチでは、単一のロールに CREATE AGGREGATION POLICY 権限があり、集計ポリシーに一貫した名前が付けられ、個別のチームまたはロールに特定の集計ポリシーの APPLY 権限があります。 - たとえば、カスタムロール - finance_roleロールには、ロールが所有するテーブルおよびビューに集計ポリシー- cost_centerを設定する権限を付与します(つまり、ロールにはテーブルまたはビューの OWNERSHIP 権限があります)。- USE ROLE securityadmin; GRANT CREATE AGGREGATION POLICY ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin; GRANT APPLY ON AGGREGATION POLICY cost_center TO ROLE finance_role;