了解 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_policy
或 consumer.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_policy
或 join_and_column_policy
筛选器时,才会对列强制执行 Clean Room 联接政策。您可以查看模板定义并使用如下语法确认存在此筛选器,从而检查模板以查看在哪里强制执行联接策略:
{{ my_column | join_policy }}
无论模板是否在列上有 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']);
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_policy
或 join_and_column_policy
筛选器时,才会对列强制执行 Clean Room 列政策。您可以查看模板定义并使用如下语法确认存在此筛选器,从而检查模板以查看在哪里强制执行列策略:
{{ my_column | column_policy }}
无论模板是否在列上有 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']);
再次调用此程序会删除先前的列策略并将其替换为新的列策略。
以下程序用于在代码中查看或管理列策略:
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 }}
以下代码演示了允许在 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' ]);
再次调用此程序会删除先前的激活策略并将其替换为新的激活策略。
以下程序用于在代码中管理激活策略:
consumer.set_activation_policy
provider.set_activation_policy
聚合策略¶
聚合策略要求对表的所有查询都包含聚合(GROUP BY、COUNT 和其他函数),还要指定每个结果组的最小行数,否则结果中将省略该组。聚合策略要求聚合针对具有聚合策略的表的所有查询(GROUP BY、COUNT 和其他聚合函数),并指定每个结果组的最小行数,否则结果中将省略该组。
Clean Room 不自行实施聚合策略;要对链接数据应用聚合约束,要么对源表应用 聚合策略,要么在模板中实施聚合约束。
一些 Snowflake 提供的模板使用为用户或模板设置的 threshold
和 threshold_value
参数。这些值可以在 Clean Room UI 中修改,也可以通过调用 provider.add_consumers
或 provider/consumer.set_privacy
进行修改。如果已为使用者设置,您可以 在模板中访问这些值。