了解 Clean Room 表策略

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

Clean Room 中的每个协作者都会根据自己的数据制定自己的策略。您的策略仅在其他用户请求后执行,不会针对您自己的请求执行。例如,如果您的联接策略仅允许对列 A 进行联接,则您可以对任何列运行联接,但其他用户只能对列 A 进行联接。

备注

当您将表链接到 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 中 任何 模板联接。联接策略在 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 和其他函数),还要指定每个结果组的最小行数,否则结果中将省略该组。

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

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

语言: 中文