了解 Clean Room 表策略

Clean Room 提供一些数据策略,用于控制协作者使用数据的方式。除此之外,还有针对与 Clean Room 关联的基础表所设置的 Snowflake 表策略。对基础表中策略的任何更改都会同步到 Clean Room 中的链接视图,无需您调用 create_or_update_cleanroom_listing 或重新链接源表。

Clean Room 中的每个协作者都会根据自己的数据制定自己的策略。

备注

当您将表链接到 Clean Room 时,源表上的 Snowflake 表策略将在 Clean Room 的链接表中强制执行,但这些策略不一定由 Clean Room API 或 UI 报告。例如,Snowflake 联接政策 将继续在 Clean Room 中强制执行,但是通过调用 consumer.view_provider_join_policyconsumer.view_join_policy 看不到该联接策略。因此,您应该从基础链接表中移除策略,创建等效的 Clean Room 策略(如果存在),或者将这些政策的存在情况明确告知协作者,这样他们的查询就不会失败或出现意外行为(“为什么我不能联接该列?”)。

Clean Room 策略可以使用 Clean Room API 或 UI 来设置。

Snowflake 隐私策略 禁止从受保护的表中创建视图,因此您无法链接具有隐私策略的表。

Clean Room 公布了以下策略:

Clean Room 策略

描述

等效的 Snowflake 策略

联接策略

指定可以联接哪些列。

联接策略

列策略

指定可以投影哪些列。

投影策略

激活政策

指定可以从 Clean Room 中导出哪些列。

没有等效的 Snowflake 策略。

尊重 Snowflake 聚合策略

要求查询中要聚合的行,以及每组的最小行数。

聚合策略

联接策略

Clean Room 联接策略指定表中哪些列可由 Clean Room 中 任何 模板联接。联接策略在 Clean Room 级别设置。

无法投影联接策略列(一列不能同时采用 Clean Room 策略和列策略)。如果您希望联接列可投影,请在 Clean Room 之外设置联接策略,在 Clean Room 中设置投影策略(或者反之)。

联接策略列也可以是激活策略列。

Clean Room 联接策略与 Snowflake 联接策略不同,后者指定 必须 联接哪些列。

如果您没有为数据指定联接策略,则可以联接(也可以投影)所有列。

实施联接政策

只有当模板使用 join_policyjoin_and_column_policy 筛选器时,才会对列强制执行 Clean Room 联接政策。您可以查看模板定义并使用如下语法确认存在此筛选器,从而检查模板以查看在哪里强制执行联接策略:

{{ my_column | join_policy }}
Copy

无论模板是否在列上有 join_policy 筛选器,都会强制执行基础表上的 Snowflake 联接策略。

以下代码显示如何允许联接来自两个不同表的两列。此策略会影响该 Clean Room 中的所有用户和所有模板。提供商和使用者在 Clean Room 中有同样的程序;调用能反映您在 Clean Room 中角色的程序。在将数据关联到 Clean Room 后,您可以随时设置联接政策。

-- Set join policies on a clean room where you are a provider
CALL samooha_by_snowflake_local_db.provider.set_join_policy('my_provider_cleanroom',
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);

-- Set join policies on a clean room where you are a consumer
CALL samooha_by_snowflake_local_db.consumer.set_join_policy('my_consumer_cleanroom',
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);
Copy

set_join_policy 会使用新的联接策略替换以前的联接策略。

以下程序用于在代码中查看或管理联接策略:

  • consumer.set_join_policy

  • consumer.view_provider_join_policy

  • consumer.view_join_policy

  • provider.view_join_policy

  • provider.set_join_policy

列策略

列策略指定当使用 特定 模板访问时,可以在分析结果中投影哪些列。在链接数据并将模板添加到 Clean Room 后,您可以随时设置列策略。

一列不能同时采用联接策略和列策略。一列可以同时采用激活策略和列策略。

如果您没有为数据指定列策略,则可以投影所有列。

实施列策略

如果模板允许,可以在 Clean Room UI 中设置列策略。

只有当模板使用 column_policyjoin_and_column_policy 筛选器时,才会对列强制执行 Clean Room 列政策。您可以查看模板定义并使用如下语法确认存在此筛选器,从而检查模板以查看在哪里强制执行列策略:

{{ my_column | column_policy }}
Copy

无论模板是否在列上有 column_policy 筛选器,都会强制执行基础表上的 Snowflake 投影策略。

以下代码演示了仅允许 prod_overlap_analysis 模板投影三列。在指定列策略时,模板名称作为列命名语法的一部分提供。此策略影响 Clean Room 中的所有用户,但仅影响该模板。提供商和使用者在 Clean Room 中有同样的程序;调用能反映您在 Clean Room 中角色的程序。

-- Set column policies on a clean room where you are a provider
call samooha_by_snowflake_local_db.provider.set_column_policy('my_provider_cleanroom',
  ['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);

-- Set column policies on a clean room where you are a consumer
call samooha_by_snowflake_local_db.consumer.set_column_policy('my_consumer_cleanroom',
  ['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
Copy

再次调用此程序会删除先前的列策略并将其替换为新的列策略。

以下程序用于在代码中查看或管理列策略:

  • consumer.set_column_policy

  • consumer.view_column_policy

  • consumer.view_provider_column_policy

  • provider.set_column_policy

  • provider.view_column_policy

激活策略

激活策略指定激活模板可以激活哪些列。激活模板将查询结果保存到提供商或使用者的 Snowflake 账户中的表中,或保存到第三方激活连接器中。

列可以是激活策略以及任何其他策略的一部分。

如果您没有为数据指定激活策略,则 无法 激活任何数据列。

实施激活策略

如果模板允许激活,则可以在 Clean Room UI 中设置激活策略。

只有当模板使用 activation_policy 筛选器时,才会对列强制执行激活策略。您可以查看模板定义并使用如下语法确认存在此筛选器,从而检查模板以查看在哪里强制执行激活策略:

{{ my_column | activation_policy }}
Copy

以下代码演示了允许在 Clean Room 中激活 HASHED_EMAIL 和 REGION_CODE 列。此策略影响 Clean Room 中的所有用户和所有激活模板。提供商和使用者在 Clean Room 中有同样的程序。调用反映您在 Clean Room 中的角色的程序。

-- Set column policies on a clean room where you are a provider
call samooha_by_snowflake_local_db.provider.set_activation_policy('my_cleanroom', [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE' ]);

-- Set column policies on a clean room where you are a consumer
call samooha_by_snowflake_local_db.consumer.set_activation_policy('my_cleanroom', [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:REGION_CODE' ]);
Copy

再次调用此程序会删除先前的激活策略并将其替换为新的激活策略。

以下程序用于在代码中管理激活策略:

  • consumer.set_activation_policy

  • provider.set_activation_policy

聚合策略

聚合策略要求对表的所有查询都包含聚合(GROUP BY、COUNT 和其他函数),还要指定每个结果组的最小行数,否则结果中将省略该组。聚合策略要求聚合针对具有聚合策略的表的所有查询(GROUP BY、COUNT 和其他聚合函数),并指定每个结果组的最小行数,否则结果中将省略该组。

Clean Room 不自行实施聚合策略;要对链接数据应用聚合约束,要么对源表应用 聚合策略,要么在模板中实施聚合约束。

一些 Snowflake 提供的模板使用为用户或模板设置的 thresholdthreshold_value 参数。这些值可以在 Clean Room UI 中修改,也可以通过调用 provider.add_consumersprovider/consumer.set_privacy 进行修改。如果已为使用者设置,您可以 在模板中访问这些值

语言: 中文