集計ポリシー

集計ポリシーは、テーブルまたはビューのデータにアクセスできるクエリの種類を制御する、スキーマレベルのオブジェクトです。集計ポリシーがテーブルに適用されている場合、そのテーブルに対するクエリは、結果を返すためにデータを最小サイズのグループに集計する必要があり、それによってクエリが個々の記録から情報を返すことを防ぎます。集計ポリシーが割り当てられたテーブルまたはビューは、 集計制約付き であると言われます。

概要

Snowflakeのコア機能は、データセットを他のエンティティと共有できることです。集計ポリシーにより、プロバイダー(データ所有者)は、データがコンシューマーと共有された後でも、そのデータで実行できる内容を制御できます。具体的には、プロバイダーはテーブルのコンシューマーに対して、個々の記録を取得するのではなく、データを集計することを要求できます。

集計ポリシーを作成するとき、プロバイダ-のポリシー管理者は、最小グループサイズ(つまり、グループに集計する必要がある行の数)を指定します。最小グループサイズが大きければ大きいほど、コンシューマーがクエリ結果を使用して1つの記録の内容を推測できる可能性が低くなります。

集計ポリシーがテーブルまたはビューに適用されると、それに対するクエリは2つの要件に従う必要があります。

  • クエリはデータを集計する必要があります。クエリが集計関数を使用する場合、 許可された集計関数 の1つである必要があります。

  • クエリによって作成される各グループには、少なくともX個の記録の集計が含まれている必要があります。ここで、Xは集計ポリシーの最小グループサイズです。

クエリが、ポリシーの最小グループサイズよりも少ない記録を含むグループを返す場合、Snowflakeはそれらのグループを 剰余グループ に結合します。Snowflakeは適切な列に集計関数を適用し、剰余グループの値を返します。ただし、その値は複数のグループに属する行から計算されるため、 GROUP BY キー列の値は NULL になります。たとえば、クエリに GROUP BY state 句が含まれている場合、剰余グループの state の値は NULL になります。

剰余グループに入力するのに十分な結果を返さないクエリでも機能しますが、結果のすべてのフィールドに NULL 値が返されます。

制限事項

このプレビューについて:

  • クエリが明示的なグループ化構文を使用する場合は、 GROUP BY 句である必要があります。クエリは GROUP BY ROLLUPGROUP 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);
    
    Copy
    例2

    protected_table が集計制約付きであると仮定すると、サブクエリは、サブクエリの外側にあるデータを集計するクエリの部分を参照するため、次のクエリは許可されません。

    SELECT
      SUM(SELECT COUNT(*) FROM open_table ot WHERE pt.id = ot.id)
    FROM protected_table pt;
    
    Copy

考慮事項

集計ポリシーを使用して機密データを保護する場合は、次の点を考慮してください。

  • 集計ポリシーは、エンティティではなく、個々の記録のデータを保護します。データセットに、同じエンティティに属する複数の記録が含まれている場合、集計ポリシーはエンティティ全体ではなく、そのエンティティに関連する特定の記録のプライバシーのみを保護します。

  • 集計ポリシーにより個々の記録へのアクセスは制限されますが、悪意のある攻撃者が意図的なクエリを使用して、集計制約付きテーブルから潜在的に機密性の高いデータを取得できないことを保証するものではありません。十分な数のクエリ試行により、悪意のある攻撃者が集計要件を回避して個々の行からの値を確認できる可能性はあります。集計ポリシーは、既に一定の信頼関係があるパートナーや顧客との使用に最適です。さらに、プロバイダーは、データ悪用の可能性(リストへのアクセス履歴の確認など)にも注意する必要があります。

集計ポリシーを作成する

集計ポリシーを作成するための構文は次のとおりです。

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

条件:

  • name はポリシーの名前を指定します。

  • AS () RETURNS AGGREGATION_CONSTRAINT はポリシーの署名と戻り型です。署名は引数を受け入れず、戻り型は内部データ型である AGGREGATION_CONSTRAINT です。すべての集計ポリシーは、同じ署名と戻り型を持ちます。

  • body は、集計ポリシーの制限を決定する SQL 式です。

本体から内部関数を呼び出す

集計ポリシーは、ポリシーの制約を定義するために NO_AGGREGATION_CONSTRAINT および AGGREGATION_CONSTRAINT の2つの内部関数を使用します。本体の条件がこれらの関数のいずれかを呼び出す場合、関数からの戻り値によって、集計制約付きテーブルまたはビューに対するクエリをどのように作成して結果を返す必要があるかが決まります。

NO_AGGREGATION_CONSTRAINT

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

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

AGGREGATION_CONSTRAINT

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

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

AGGREGATION_CONSTRAINT ( MIN_GROUP_SIZE => <integer_expression> )
Copy

ここで、 integer_expressionポリシーの最小グループサイズ に解決されます。

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

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

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

注釈

集計ポリシーの本体では、ユーザー定義関数、テーブル、またはビューを参照できません。

ポリシーの例

固定された最小グループサイズ

もっとも単純な集計ポリシーは AGGREGATION_CONSTRAINT 関数を直接呼び出し、テーブルに対するすべてのクエリに適用される一定の最小グループサイズを定義します。たとえば、次のコマンドは最小グループサイズが5の集計ポリシーを作成します。

CREATE AGGREGATION POLICY my_agg_policy
  AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
Copy
条件付きポリシー

ポリシー管理者は、集計ポリシーの 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;
Copy

集計ポリシーを変更する

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);
Copy

集計ポリシーを割り当てる

集計ポリシーを作成すると、1つ以上のテーブルまたはビューに適用して、集計制約を設定できます。テーブルまたはビューには、集計ポリシーを1つだけ関連付けることができます。

既存のテーブルまたはビューに集計ポリシーを割り当てるには、 ALTER TABLE コマンドまたは ALTER VIEW コマンドの SET AGGREGATION POLICY 句を使用します。

ALTER { TABLE | VIEW } <name> SET AGGREGATION POLICY <policy_name> [ FORCE ]
Copy

条件:

  • name はテーブルまたはビューの名前を指定します。

  • policy_name は集計ポリシーの名前を指定します。

  • FORCE はオプションのパラメーターで、すでに集計ポリシーが割り当てられているテーブルまたはビューにコマンドで集計ポリシーを割り当てることができます。新しい集計ポリシーは、既存のポリシーを自動的に置き換えます。

たとえば、ポリシー my_agg_policy をテーブル t1 に割り当てるには、次を実行します。

ALTER TABLE t1 SET AGGREGATION POLICY my_agg_policy;
Copy

CREATE TABLE および CREATE VIEW コマンドの WITH 句を使用して、作成時にテーブルまたはビューに集計ポリシーを割り当てることもできます。たとえば、ポリシー my_agg_policy を新しいテーブルに割り当てるには、次を実行します。

CREATE TABLE t1 WITH AGGREGATION POLICY my_agg_policy;
Copy

集計ポリシーを置き換える

集計ポリシーを置き換える場合は、 FORCE パラメーターを使用して既存の集計ポリシーをデタッチし、1つのコマンドで新しい集計ポリシーを割り当てる方法が推奨されます。この方法により、保護にギャップが残らないように、古いポリシーを自動的に置き換えることができます。

たとえば、すでに集計制約が設定されているテーブルに新しい集計ポリシーを割り当てるには、次のようにします。

ALTER TABLE privacy SET AGGREGATION POLICY agg_policy_2 FORCE;
Copy

1つのステートメント(... UNSET AGGREGATION POLICY)でテーブルまたはビューから集計ポリシーをデタッチし、別のステートメント(... SET AGGREGATION POLICY <name>)でテーブルまたはビューに新しいポリシーを設定することもできます。この方法を選択した場合、1つのポリシーをデタッチして別のポリシーを割り当てるまでの間、テーブルは集計ポリシーによって保護されません。この間にクエリが機密データにアクセスする可能性があります。

集計ポリシーのデタッチ

データを集計する必要性をなくすために、テーブルまたはビューから集計ポリシーをデタッチするには、 ALTER TABLE または ALTER VIEW コマンドの UNSET AGGREGATION POLICY 句を使用します。テーブルまたはビューには複数の集計ポリシーを関連付けることができないため、集計ポリシーの名前は必要ありません。

ALTER {TABLE | VIEW} <name> UNSET AGGREGATION POLICY
Copy

条件:

  • name はテーブルまたはビューの名前を指定します。

たとえば、ビュー v1 から集計ポリシーをデタッチするには、次を実行します。

ALTER VIEW v1 UNSET AGGREGATION POLICY;
Copy

集計ポリシーをモニターする

集計ポリシーの使用状況をモニターする方法を決定するには、2つの一般的なアプローチを検討すると役立ちます。

集計ポリシーを見つける

共有 SNOWFLAKE データベースのAccount Usageスキーマで AGGREGATION_POLICIES ビューを使用できます。このビューは、Snowflakeアカウント内にあるすべての集計ポリシーの カタログ です。例:

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.AGGREGATION_POLICIES
ORDER BY POLICY_NAME;
Copy

集計ポリシーの参照を特定する

POLICY_REFERENCES Information Schemaテーブル関数は、集計ポリシーの参照を識別できます。2つの異なる構文オプションがあります。

  1. 指定された集計ポリシーが設定されている各オブジェクト(テーブルまたはビュー)の行を返します。

    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'));
    
    Copy
  2. 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'));
    
    Copy

クエリの要件

集計ポリシーがテーブルまたはビューに適用された後、そのテーブルまたはビューに対するクエリは特定の要件に準拠する必要があります。このセクションでは、集計制約付きテーブルまたはビューに対するクエリで許可される内容と許可されない内容について説明します。

注釈

クエリの一部が集計ポリシーの要件を満たすようにデータを適切に集計すると、これらのクエリ制限は適用されなくなり、クエリの別の部分には、それ以外では禁止されているものを含めることができます。

たとえば、次のクエリでは、クエリの別の部分が protected_table に割り当てられているポリシーの集計要件をすでに満たしているため、結果を集計しない SELECT ステートメントを使用できます。

SELECT * FROM open_table ot WHERE ot.a > (SELECT SUM(id) FROM protected_table pt)
Copy

クエリに含めることができるその他の制限については、 制限事項 をご参照ください。

集計関数

集計制約付きテーブルに対するクエリでは、次の集計関数を使用できます。

クエリには、許可されている集計関数を複数含めることができます。許可されていない集計関数を使用しようとすると、クエリは失敗します。

グループ化ステートメント

集計制約付きテーブルに対するクエリは、データを最小サイズのグループに集計する必要があります。明示的なグループ化ステートメント(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;
Copy

クエリは次を返します。

+-----------------+
|  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;
Copy

キー a によって形成される各グループは、 protected_table1 からの2つの記録と protected_table2 からの5つの記録が含まれている必要があります。それ以外の場合、記録は剰余グループに配置されます。

外部関数

クエリの別の部分で集計制約付きテーブルの要件を満たす結果が適切に集計されていない限り、クエリは 外部関数 を呼び出すことはできません。

ロギングとメトリック

クエリは、 UDF ログ記録またはメトリックを介して集計制約付きテーブルの列をログに記録することはできません。

データ型の変換

SELECT ステートメントにデータ型変換関数を含むクエリでは、 TRY バージョンの関数を使用する必要があります。たとえば、 TRY_CAST 関数は許可されていますが、 CAST 関数は禁止されています。数値型では次のデータ型変換関数が許可されます。

PIVOT

クエリでは、集計制約付きテーブルの列に対して PIVOT 演算子を使用することはできません。

拡張例

集計ポリシーをテーブルに割り当てるには、マスキングポリシーや投影ポリシーなどの他のポリシーを作成して割り当てる場合と同じ、一般的な手順に従います。

  1. 集中管理アプローチを使用している場合は、ポリシーを管理するためのカスタムロール(例: agg_policy_admin)を作成します。または、既存のロールを使用できます。

  2. このロールに、集計ポリシーを作成および割り当てる権限を付与します。

  3. 集計ポリシーを作成します。

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

集計ポリシーがテーブルに割り当てられると、テーブルに対する正常なクエリではそのデータの集計が必要になります。

次の拡張例では、プロバイダーのアクセス制御管理者がカスタムロールを作成することから、データコンシューマーがクエリを実行して集計結果を返すまで、このプロセスの各ステップについて詳しく説明します。

アクセス制御管理者のタスク
  1. 集計ポリシーを管理するためのカスタムロールを作成します。既存のロールを再利用することもできます。

    USE ROLE USERADMIN;
    
    CREATE ROLE AGG_POLICY_ADMIN;
    
    Copy
  2. スキーマに集計ポリシーを作成し、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;
    
    Copy

    agg_policy_admin ロールを1人以上のユーザーに割り当てることができるようになりました。

    集計ポリシーを操作するために必要な権限の詳細については、 権限とコマンド (このトピック内)をご参照ください。

集計ポリシー管理者のタスク
  1. 集計を要求する集計ポリシーを作成し、最小グループサイズを3に定義します。

    USE ROLE agg_policy_admin;
    USE SCHEMA privacy.aggpolicies;
    
    CREATE AGGREGATION POLICY my_policy
      AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 3);
    
    Copy
  2. 集計ポリシーをテーブル t1 に割り当てます。

    ALTER TABLE t1 SET AGGREGATION POLICY my_policy;
    
    Copy
コンシューマークエリ

プロバイダーが集計制約付きテーブルを共有すると、データコンシューマーはそのテーブルに対してクエリを実行できます。この例では、集計制約付きテーブル t1 に次の行が含まれていると仮定します。

ピーク

状態

上昇

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;
Copy

結果は次のとおりです。

+----------+-----------------+
|  STATE   |  AVG_ELEVATION  |
|----------+-----------------+
|  NH      |  4435           |
|  NULL    |  3543           |
+----------+-----------------+

2つ目のグループの state の値は NULL であることに注意してください。これは VTMA の両方のピークの上昇を平均した剰余グループであるからです。

Snowflake機能を使用した集計ポリシー

以下のサブセクションでは、集計ポリシーがさまざまなSnowflake機能やサービスとどのように相互作用するかを簡単に説明します。

その他のポリシー

このセクションでは、 マスキングポリシー行アクセスポリシー投影ポリシー などの他のポリシーと集計ポリシーがどのように相互作用するかを説明します。

集計制約付きテーブルに他のポリシーを関連付けることができます。テーブルに対する正常なクエリは、すべてのポリシーの要件を満たす必要があります。

行アクセスポリシーが集計制約付きテーブルに割り当てられている場合、行アクセスポリシーに基づいてクエリ結果から除外された行は、集計結果の計算時に含まれません。

マスキングポリシー、行アクセスポリシー、投影ポリシーの本体では、その列を含め、集計制約付きテーブルを参照できません。同様に、他のポリシーの本体には、集計制約付きテーブルを参照する UDF を含めることはできません。

ビューおよびマテリアライズドビュー

集計ポリシーは、ビューとマテリアライズドビューの両方に割り当てることができます。集計ポリシーがビューに適用されると、基になるテーブルは集計制約を受けなくなります。このベーステーブルは、引き続き制限なくクエリできます。

機密データが公開される可能性を回避するために、集計制約付きのすべてのビューは、そうでない場合であっても、 セキュアビュー であるかのように扱われます。

集計制約付きテーブルからビューを作成できるかどうかは、ビューのタイプに応じて異なります。

  • 1つ以上の集計制約付きテーブルから通常のビューを作成できますが、そのビューに対するクエリでは、それらのベーステーブルの制約を満たす方法でデータを集計する必要があります。

  • 集計制約付きテーブルまたはビューに基づいてマテリアライズドビューを作成することはできません。また、マテリアライズドビューの基になるテーブルまたはビューに集計ポリシーを割り当てることもできません。

クローンされたオブジェクト

次のアプローチは、クローンされたデータベースまたはスキーマに格納されているクローンされたテーブルまたはビューの SELECT 権限を持つユーザーからデータを保護するのに役立ちます。

  • 個別の集計ポリシーオブジェクトのクローニングはサポートされていません。

  • データベースをクローニングすると、データベース内のすべての集計ポリシーがクローニングされます。

  • スキーマをクローニングすると、スキーマ内のすべての集計ポリシーがクローニングされます。

  • クローンされたテーブルは、ソーステーブルと同じ集計ポリシーにマップされます。

    • テーブルがその親スキーマクローニングのコンテキストでクローンされるときに、同じ親スキーマの集計ポリシーへの参照(つまり、ローカル参照)がソーステーブルにあると、クローンされたテーブルはクローンされたポリシーへの参照を持つようになります。

    • ソーステーブルが別のスキーマの集計ポリシー(外部参照など)を参照している場合、複製されたテーブルは外部参照を保持します。

詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。

複製

集計ポリシーとその割り当ては、データベース複製と複製グループを使用して複製できます。

データベース複製 の場合は、次のいずれかの条件に該当すると、複製操作に失敗します。

  • プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、ポリシーを含んでいるが、下位エディションには、複製の承認されたアカウントが1つ以上ある。

  • プライマリデータベースに含まれるテーブルまたはビューには、別のデータベースにある集計ポリシーへの ダングリングリファレンス がある。

複製グループ で複数のデータベースを複製すると、データベース複製のダングリングリファレンス動作を回避できます。

権限とコマンド

次のサブセクションでは、集計ポリシーの管理に役立つ情報を提供します。

集計ポリシーの権限

Snowflakeは、集計ポリシーオブジェクトに対して次の権限をサポートしています。

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

権限

使用状況

APPLY

テーブルの集計ポリシーの設定および設定解除操作を有効にします。

OWNERSHIP

集計ポリシーの所有権を譲渡し、集計ポリシーに対する完全な制御を許可します。集計ポリシーのほとんどのプロパティを変更するために必要です。

詳細については、このトピックの DDL コマンド、操作、および権限の概要 をご参照ください。

集計ポリシー DDL 参照

Snowflake は、集計ポリシーを作成および管理するために次の DDL をサポートしています。

DDL コマンド、操作、および権限の概要

次のテーブルは、集計ポリシー権限と DDL 操作の関係をまとめたものです。

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

操作

必要な権限

集計ポリシーを作成します。

同じスキーマ内の CREATE AGGREGATION POLICY 権限を持つロール。

集計ポリシーを変更します。

集計ポリシーに対する OWNERSHIP 権限を持つロール。

集計ポリシーを記述します

次のいずれかを使用します。

  • グローバル APPLY AGGREGATION POLICY 権限を持つロール。 または

  • 集計ポリシーに対する OWNERSHIP 権限を持つロール。 または

  • 集計ポリシーに対する APPLY 権限を持つロール。

集計ポリシーをドロップします。

集計ポリシーに対する OWNERSHIP 権限を持つロール。

集計ポリシーを表示します。

次のいずれかを使用します。

  • 集計ポリシーが存在するスキーマに対する USAGE 権限を持つロール。 または

  • アカウントに対する APPLY AGGREGATION POLICY を持つロール。

テーブルの集計ポリシーを設定または設定解除します。

次のいずれかを使用します。

  • アカウントに対する APPLY AGGREGATION POLICY 権限を持つロール。 または

  • 集計ポリシーに対して APPLY 権限を持ち、テーブルまたはビューに対して OWNERSHIP 権限を持つロール。

Snowflakeは、オブジェクトに集計ポリシーを作成および設定するためのさまざまなアクセス権限をサポートしています。

  1. aggregation_policy_admin カスタムロールが すべての テーブルに集計ポリシーを作成および設定する集中型の集計ポリシー管理アプローチの場合は、次の権限が必要です。

    USE ROLE securityadmin;
    GRANT USAGE ON DATABASE mydb TO ROLE agg_policy_admin;
    GRANT USAGE ON SCHEMA mydb.schema TO ROLE proj_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;
    
    Copy
  2. ハイブリッド型管理アプローチでは、単一のロールに 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;
    
    Copy