通过聚合策略实施实体级隐私

实体级隐私增强了聚合策略提供的隐私保护。通过实体级隐私,Snowflake 可以确保聚合组包含一定数量的实体,而不仅仅是一定数量的行。

大多数与聚合策略相关的任务和注意事项是相同的,无论您是否在实施实体级隐私。有关使用聚合策略的一般信息,请参阅 聚合策略

关于实体级隐私

实体 是指属于逻辑对象的一组属性(例如,用户简介或家庭信息)。这些属性可以用来识别数据集中的实体。实体级隐私是隐私增强技术 (PET) 的功能,用于保护存储在共享数据集中的实体隐私。实体级隐私可确保查询无法暴露实体的敏感属性,即使这些属性可在多条记录中找到。

为了实现实体级隐私,Snowflake 允许您指定哪些属性可用于识别实体(实体键)。这让 Snowflake 能够识别数据集中属于特定实体的所有记录。例如,如果实体键被定义为列 email,则 Snowflake 可以确定 email=joe.smith@example.com 属于同一实体的所有记录。

具有实体级隐私的聚合策略

默认情况下,聚合策略要求分析师运行聚合数据的查询,而不是检索单个行,从而实现 行级隐私。然而,当在多个行中(例如,在包含事务数据的表中)发现某个实体的属性时,行级隐私并不能阻止查询暴露这些属性。

例如,假设流媒体服务 ActonViz 拥有的事务表中包含每个观众在观看节目时的电子邮件地址 (user_id) 和家庭 (household_id)。

user_id

household_id

program_id

watch_time

start_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 设定的要求(每组至少 2 条记录)。

具有 实体级隐私的聚合策略

为了实现实体级隐私,Snowflake 允许您在将聚合策略分配给表或视图时指定实体键。在定义实体键之后,对聚合约束表或视图的查询返回的组必须包含指定数量的实体,而不仅仅是指定数量的行。

在前面的示例中,假设 ActonViz 将 household_id 定义为实体键,因为它唯一地标识了每个家庭。每个家庭的隐私现在得到了保护。在变更之前,一个组可以完全由 household_id = 12345 的记录组成,但现在它必须至少包含两个不同的 household_id 值。

请注意,实体键不一定与表的 主键 相同。在此示例中,表可能使用 user_id 作为主键,因为它唯一地标识了观众。但在这种情况下,ActonViz 想要保护整个家庭的隐私,家庭由多个观众组成,因此他们选择了 household_id 作为实体键。

关于最小组大小

每个聚合策略都指定了最小组大小。在没有实体级隐私的情况下,最小组大小定义了聚合组中必须包含的记录数量。当指定了实体键后,最小组大小定义了聚合组中必须包含的实体数量。

以下列级策略不影响 Snowflake 计算聚合组中是否有足够实体的方式:

  • 投影策略没有影响。

  • 掩码策略没有影响。当掩码策略被分配给 GROUP BY 列时,查询形成的聚合组基于掩码策略返回的值。其中每个组必须有足够的实体。

在多次使用名称引用的情况下(例如,在 JOIN 或 UNION 运算符中),Snowflake 分别对每个数据集的每个名称引用强制执行最小组大小。即使引用多次指向同一数据集,这也适用。

通过聚合策略强制实施实体级隐私

要通过聚合策略强制实施实体级隐私,请执行以下操作:

  1. 在执行 CREATE AGGREGATION POLICY 命令以创建聚合策略时,指定每个聚合组中必须包含的实体数量

  2. 将聚合策略分配给表或视图时 定义实体键

指定实体的最小数量

如果使用实体键实现实体级隐私时,则通过 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);
Copy

有关创建聚合策略的完整详细信息,包括在不同情况下强制执行不同限制的条件聚合策略示例,请参阅 创建聚合策略

定义实体键

当您将聚合策略分配给表或视图时,您可以为表定义实体键。您可以在 创建新表或视图 时定义实体键,也可以在 更新现有表或视图 时定义实体键。

为现有表和视图定义实体键

执行 ALTER TABLE ...SET AGGREGATION POLICY 命令或 ALTER VIEW ...SET AGGREGATION POLICY 命令以分配聚合策略时,使用 ENTITY KEY 子句指定表或视图中包含实体的标识属性的列(即实体键)。

例如,要在将聚合策略 my_agg_policy 分配给表 viewership_log 的同时创建实体键,请执行以下操作:

ALTER TABLE viewership_log
  SET AGGREGATION POLICY my_agg_policy
  ENTITY KEY (first_name,last_name);
Copy

因为列 first_namelast_name 是实体键,所以聚合策略可以确定 first_name = joelast_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);
Copy

因为列 first_namelast_name 是实体键,所以聚合策略可以确定 first_name = joelast_name = peterbilt 属于同一实体的所有行。

查询聚合约束表

查询具有实体键的聚合约束表的要求与查询没有实体键的表的要求相同。有关哪些类型的查询符合这些要求的信息,请参阅 查询要求

语言: 中文