集計ポリシーによるエンティティレベルのプライバシーの実装¶
エンティティレベルのプライバシーは、集計ポリシーによって提供されるプライバシー保護を強化します。エンティティレベルのプライバシーを使用すると、Snowflakeは、集計グループが特定の行数だけでなく、特定の数のエンティティを含むことを保証できます。
集計ポリシーに関連するタスクと考慮事項の大部分は、エンティティレベルのプライバシーを実装しているかどうかに関係なく同じです。集計ポリシーの操作に関する一般的な情報については、 集計ポリシー をご参照ください。
エンティティレベルのプライバシーについて¶
エンティティ とは、論理オブジェクト(例えば、ユーザープロファイルや世帯情報)に属する属性の集合を指します。これらの属性は、データセット内のエンティティの識別に使用できます。エンティティレベルのプライバシーは、共有データセットに格納されているエンティティのプライバシーを保護するプライバシー拡張技術(PET)の機能です。クエリによって、エンティティの機密属性が複数のレコードで見つかったとしても、その属性が公開されないようにします。
エンティティレベルのプライバシーを実現するために、Snowflakeではエンティティの識別に使用できる属性(エンティティキー)を指定できます。これにより、Snowflakeはデータセット内の特定のエンティティに属するすべての記録を識別子化することができます。たとえば、エンティティキーが列 email
として定義されている場合、Snowflakeは email=joe.smith@example.com
のすべての記録が同じエンティティに属していると判断できます。
エンティティレベルのプライバシーが ない 集計ポリシー¶
デフォルトでは、集計ポリシーにより、アナリストは個々の行を取得するのではなく、データを集計するクエリを実行する、つまり 行レベルのプライバシー を達成する必要があります。しかし、行レベルのプライバシーは、クエリによってエンティティの属性が複数の行(例えば、トランザクションデータを含むテーブル)で検出された場合に、その属性が公開されることを防ぐことはできません。
たとえば、あるストリーミングサービス(ActonViz)が、番組を視聴する各視聴者の電子メールアドレス(user_id
)と世帯(household_id
)を含むトランザクションテーブルを持っているとします。
user_id |
household_id |
program_id |
watch_time |
開始時刻 |
---|---|---|---|---|
dave_sr@company.com |
12345 |
1 |
29 |
2023-09-12 09:00 |
mary@bazco.com |
23485 |
1 |
30 |
2023-09-12 09:00 |
dave_sr@company.com |
12345 |
6 |
18 |
2023-09-11 13:00 |
joe@jupiterlink.com |
85456 |
6 |
25 |
2023-09-15 22:00 |
junior@example.com |
12345 |
5 |
30 |
2023-09-13 11:00 |
ActonVizは、集計ポリシーを使用して、少なくとも2つの記録を含むグループにデータを集約するように広告主に強制することができます。これにより、広告主が個々の記録からデータを取得することを防ぎます(行レベルのプライバシー)。それぞれの視聴者と世帯が表に一度だけ登場すれば、プライバシー保護には十分でしょう。
しかし、広告主のクエリは、視聴者とその世帯の両方の情報を知ることができます。クエリによって、世帯 12345
の記録だけで構成されるグループや、さらに悪いことに、視聴者 dave_sr
の記録だけで構成されるグループが作成される可能性があります。どちらの場合も、グループ内の記録数はActonViz(1グループあたり最低2件の記録)が定める条件を満たすことになります。
エンティティレベルのプライバシーを 持つ 集計ポリシー¶
エンティティレベルのプライバシーを実現するために、Snowflakeでは集計ポリシーをテーブルや表示に割り当てる際にエンティティキーを指定することができます。エンティティキーが定義された後、集計制約のあるテーブルまたは表示に対するクエリによって返されるグループには、指定された行数だけでなく、指定された数のエンティティが含まれている必要があります。
先ほどの例で、 ActonViz が各世帯を一意に識別するため、 household_id
をエンティティキーとして定義したとします。各世帯のプライバシーが守られるようになりました。変更前は、 household_id = 12345
の記録だけでグループを構成することができましたが、現在は、 household_id
の少なくとも2つの異なる値を含む必要があります。
エンティティキーは、テーブルの プライマリキー と同じになるとは限らないことに注意してください。この例では、 user_id
をプライマリキーとして使用します。しかしこの場合、 ActonViz が複数の視聴者からなる世帯全体のプライバシーを保護したいため、 household_id
をエンティティキーとして選びました。
最小グループサイズについて¶
すべての集計ポリシーは、最小グループサイズを指定します。エンティティレベルのプライバシーがない場合、最小グループサイズは、集計グループに含める必要がある記録数を定義します。エンティティキーが指定されている場合、最小グループサイズは、集計グループに含まれなければならないエンティティの数を定義します。
以下の列レベルのポリシーは、Snowflakeが集計グループに十分なエンティティがあるかどうかを計算する方法には影響しません:
投影ポリシーの効果はありません。
マスキングポリシーの効果はありません。マスキングポリシーが GROUP BY 列に割り当てられている場合、クエリによって形成される集計グループは、マスキングポリシーによって返される値に基づいています。これらのグループには、それぞれ十分なエンティティが必要です。
名前参照が複数回使用される場合(たとえば、 JOIN または UNION 演算子)、Snowflakeは各データセットの各名前参照に対して個別に最小グループサイズを強制します。これは、同じデータセットを何度も参照する場合にも当てはまります。
集計ポリシーによってエンティティレベルのプライバシーを強制する¶
集計ポリシーでエンティティレベルのプライバシーを強制するには、次のようにします。
CREATE AGGREGATION POLICY コマンドを実行して集計ポリシーを作成する場合は、各集計グループに含める必要がある エンティティの数を指定 します。
テーブルまたはビューに集計ポリシーを割り当てる場合は、 エンティティキーを定義 します。
最小エンティティ数の指定¶
CREATE AGGREGATION POLICY で集計ポリシーを作成する構文は、エンティティキーを使用してエンティティレベルのプライバシーを実現する場合でも変わりません。最小グループサイズを指定するには、 AGGREGATION_CONSTRAINT 関数の引数 MIN_GROUP_SIZE を使用します。 エンティティキーを定義する とすぐに、最小グループサイズは、グループ内の記録数に対する要件から、グループ内のエンティティ数に対する要件に変わります。
たとえば、次のコマンドは最小グループサイズが5の集計ポリシーを作成します。ポリシーをテーブルに割り当てるときにエンティティキーを定義する限り、各集約グループには少なくとも5つのエンティティが含まれる必要があります。
CREATE AGGREGATION POLICY my_agg_policy
AS () RETURNS AGGREGATION_CONSTRAINT ->
AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
異なる状況下で異なる制限を実施する条件付き集計ポリシーの例を含む、集計ポリシーの作成に関する完全な詳細については、 集計ポリシーを作成する をご参照ください。
エンティティキーの定義¶
集計ポリシーをテーブルまたは表示に割り当てるときに、テーブルのエンティティキーを定義します。エンティティキーの定義は、 新規テーブルまたはビュー の作成時、または ビュー の既存のテーブルの更新時に行うことができます。
既存のテーブルや表示に対してエンティティキーを定義する¶
ALTER TABLE ... SET AGGREGATION POLICY コマンドまたは ALTER VIEW ... SET AGGREGATION POLICY コマンドを実行して集計ポリシーを割り当てる場合は、ENTITY KEY 句を使用して、テーブルまたは表示内のどの列にエンティティの識別子属性(つまり、エンティティキー)が含まれるかを指定します。
たとえば、テーブル viewership_log
に集計ポリシー my_agg_policy
を割り当てながらエンティティキーを作成するには、次のように実行します。
ALTER TABLE viewership_log
SET AGGREGATION POLICY my_agg_policy
ENTITY KEY (first_name,last_name);
列 first_name
と last_name
はエンティティキーなので、集計ポリシーは first_name = joe
と last_name = peterbilt
が同じエンティティに属するすべての行を決定できます。
新しいテーブルとビューのエンティティキーを指定する¶
CREATE TABLE ... WITH AGGREGATION POLICY コマンドまたは CREATE VIEW ... WITH AGGREGATION POLICY コマンドを実行して集計ポリシーを割り当てる場合は、ENTITY KEY 句を使用して、テーブルまたは表示内のどの列にエンティティの識別属性が含まれるかを指定します。
例えば、集計ポリシーを割り当て、エンティティキーを定義しながら新しいテーブル t1
を作成するには、以下を実行します。
CREATE TABLE t1
WITH AGGREGATION POLICY my_agg_policy
ENTITY KEY (first_name,last_name);
列 first_name
と last_name
はエンティティキーなので、集計ポリシーは first_name = joe
と last_name = peterbilt
が同じエンティティに属するすべての行を決定できます。
集計制約のあるテーブルのクエリ¶
エンティティキーを持つ集計制約付きテーブルのクエリの要件は、エンティティキーを持たないテーブルのクエリと同じです。これらの要件に適合するクエリの種類については、 クエリの要件 をご参照ください。