Snowflake Data Clean Room:提供商 API 参考指南

本页描述了 Clean Room API 使用者管理其 Clean Room 时使用的程序。有关编码设置的说明,请参阅 编码设置

创建、配置和删除 Clean Room

provider.view_cleanrooms

描述: 列出此提供商账户创建的所有现有 Clean Room。

实参:

返回: (表) 此提供商账户创建的 Clean Room 列表。Clean Room 无需与使用者共享、由使用者安装或使用。已删除的 Clean Room 将从数据库中清除,并且不显示在此列表中。

示例:

CALL samooha_by_snowflake_local_db.provider.view_cleanrooms();
Copy

provider.describe_cleanroom

描述: 获取有关 Clean Room 的信息摘要,如模板、联接策略、列策略和使用者。

实参:

  • cleanroom_name(字符串) – 要获取信息的 Clean Room 的名称。

返回: (字符串) Clean Room 元数据摘要。

示例:

CALL samooha_by_snowflake_local_db.provider.describe_cleanroom($cleanroom_name);
Copy

provider.cleanroom_init

描述: 在账户中创建指定名称的 Clean Room。此过程可能需要一分钟或更长时间才能运行。在您调用 create_or_update_cleanroom_listing 后,Clean Room 才会在 Clean Room UI 中显示或对协作者可见。

实参:

  • cleanroom_name(字符串) – Clean Room 名称,最多 80 个字符。名称包括 [A‑Z,a‑z,0‑9, ,_]。

  • distribution(字符串,可选) – 以下值之一:

    • INTERNAL(默认)– Clean Room 仅对同一组织内的用户可见,并且在 更改默认版本 之前不会触发安全扫描。

    • EXTERNAL – Clean Room 可随时投入生产,并可与组织外共享。在 更改默认版本 之前,Clean Room 会触发安全扫描。如果要在创建 Clean Room 后更改分发,请调用 ALTER PACKAGE,如下所示:

      ALTER APPLICATION PACKAGE samooha_cleanroom_<CLEANROOM_ID> SET DISTRIBUTION = EXTERNAL;
      
      Copy

返回: (字符串) 成功或失败消息。

示例:

-- Create an internal clean room
CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Copy

provider.set_default_release_directive

描述: 指定协作者在 Clean Room UI 中启动新的浏览器会话或从 API 访问 Clean Room 时加载的 Clean Room 的版本和补丁。必须在与使用者共享 Clean Room 之前调用。

无论何时上传或更改 Python 代码,Clean Room 应用程序都会创建一个新版本的 Clean Room。如果您希望为用户提供最新版本的服务,请使用新的版本号调用此过程。要查看可用版本并了解当前默认版本,请运行:

如果您忘了最新的补丁号,可以运行以下代码来查看有哪些版本可用(您可能想使用最新的版本作为默认版本):

SHOW VERSIONS IN APPLICATION PACKAGE SAMOOHA_CLEANROOM_<cleanroom_name>
Copy

其中,<cleanroom_name> 遵循此格式

创建的所有 Clean Room 都有以下版本号和补丁号:

  • 版本:V1_0

  • 补丁:0

备注

如果 Clean Room 分布设置为 EXTERNAL,则只有在 Clean Room 安全扫描进入 APPROVED 状态后,才能调用此过程。要查看安全状态,请调用 view_cleanroom_scan_status

实参:

  • cleanroom_name(字符串) – Clean Room 名称。

  • version(字符串) – 版本。必须始终为“V1_0”。

  • patch(字符串) – 使用者加载的补丁号。补丁号从 0 开始,每当有新的 Clean Room 版本可用时,都应该递增。您可以看到如上所述的可用版本。

返回: (字符串) 成功消息。

示例:

CALL samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '0');
Copy

provider.drop_cleanroom

描述: 删除 Clean Room。安装了 Clean Room 的协作者将无法再访问或使用。下次刷新浏览器时,Clean Room 不再显示在 Clean Room UI 中。

实参:

  • cleanroom_name(字符串) – 要删除的 Clean Room 的名称。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.drop_cleanroom($cleanroom_name);
Copy

provider.enable_consumer_run_analysis

描述: 让使用者能够在 Clean Room 运行分析。此功能默认在所有新的 Clean Room 中启用,因此,仅当您明确禁用了 Clean Room 的使用者运行分析时,才需要运行此过程。

实参:

  • cleanroom_name(字符串) – 允许使用者运行分析的 Clean Room 的名称。

  • consumer_accounts(字符串数组) – 要为之启用此功能的所有使用者的账户定位器。NOTE: 这些使用者必须已经添加到 Clean Room。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.enable_consumer_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR_1>']); 
Copy

provider.disable_consumer_run_analysis

描述: 防止指定使用者在指定 Clean Room 运行分析。默认情况下,允许所有使用者在 Clean Room 内运行分析。

实参:

  • cleanroom_name(字符串) – 正在禁用使用者运行分析的 Clean Room。

  • consumer_accounts(字符串数组) – 无法在此 Clean Room 中运行分析的使用者的账户定位器。NOTE: 这些使用者必须已经添加到 Clean Room。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.disable_consumer_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR_1>']); 
Copy

library.is_consumer_run_enabled

描述: 检查此 Clean Room 是否允许使用者运行分析。

实参:

  • cleanroom_name(字符串) – 要检查的 Clean Room 的名称。

返回: (字符串) 此 Clean Room 是否允许使用者运行分析。

示例:

CALL samooha_by_snowflake_local_db.library.is_consumer_run_enabled($cleanroom_name)
Copy

provider.create_or_update_cleanroom_listing

描述: 发布新 Clean Room 或更新现有 Clean Room。每当对 Clean Room 进行更改时,您都应该调用此方法,以确保将更改传播给使用者。

首次发布 Clean Room 时,可能需要最多 15 分钟的时间才能在 Clean Room UI 中看到 Clean Room。

如果您之后在不调用此方法的情况下对 Clean Room 进行更新,则不能保证这些更改会传播给使用者。

您可以在单个账户中创建的 Clean Room + 协作者数量是有限的。如果您创建的测试 Clean Room 过多,则可能需要删除一些才能创建新的 Clean Room。如果您需要的 Clean Room 数量超出账户容量,请联系 Snowflake 支持部门。

备注

在调用此过程之前,必须至少设置一次发布指令。 有关更多信息,请参阅 provider.set_default_release_directive

实参:

  • cleanroom_name(字符串) – 要发布或更新的 Clean Room 的名称。

返回: (字符串) 成功或失败消息。

错误处理:

如果您收到一条错误消息,即“Cross-Cloud Auto-Fulfillment is not enabled for this account”,则表示使用者之一位于另一个云托管区域。您必须按照 在 Snowflake Data Clean Rooms 中管理 Cross-Cloud Auto-Fulfillment 中所述启用 Cross-Cloud Auto-Fulfillment。

示例:

CALL samooha_by_snowflake_local_db.provider.create_or_update_cleanroom_listing($cleanroom_name);
Copy

注册和取消注册数据

使用以下命令注册和取消注册数据库、架构和对象。必须先注册表和视图,然后才能将其链接到 Clean Room。如果您注册了一个数据库或架构,则还需注册该数据库或架构中的所有对象。

了解有关注册数据的详细信息。

provider.register_db

描述: 使数据库及其中的所有对象能够链接到此 Clean Room 环境中的单个 Clean Room。此过程将数据库的 USAGE 和 SELECT 权限授予 SAMOOHA_APP_ROLE,Clean Room 环境使用该角色访问数据。

您必须具有对数据库的 MANAGE GRANTS 访问权限才能调用此过程。然后,此 Clean Room 环境中的其他提供商可以将这些对象链接到自己的 Clean Room,而无需其 SELECT 权限。

了解有关注册数据的详细信息。

重要

此过程不会注册调用后创建的任何对象。如果向数据库中添加了新对象,并且您也希望注册这些对象,则必须再次调用此过程。

实参:

  • db_name(字符串) – 要注册的数据库的名称。

返回: (字符串) 成功或失败消息。

示例:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.provider.register_db('SAMOOHA_SAMPLE_DATABASE');
Copy

library.register_schema

描述:register_db 类似,但在架构级运行。您必须具有对架构的 MANAGE GRANTS 权限才能调用此过程。

此过程将架构的 USAGE 和 SELECT 权限授予 SAMOOHA_APP_ROLE,Clean Room 环境使用该角色访问数据。

如果要注册托管访问架构(即使用 WITH MANAGED ACCESS 参数创建的架构),请改用 library.register_managed_access_schema

重要

此过程不会注册调用后创建的任何对象。如果向数据库中添加了新对象,并且您也希望注册这些对象,则必须再次调用此过程。

实参:

  • schema_name(字符串数组) – 要注册的一个或多个完全限定架构名称的数组。

返回: (字符串) 成功或失败消息。

示例:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.register_schema(['SAMOOHA_SAMPLE_DATABASE.DEMO']);
Copy

library.register_managed_access_schema

描述: 类似于 register_schema,但注册了使用 WITH MANAGED ACCESS 参数创建的架构。您必须具有架构的 MANAGE GRANTS 权限才能调用此过程。

此过程将托管架构使用权限授予 SAMOOHA_APP_ROLE,Clean Room 环境使用该角色访问数据。

重要

此过程不会注册调用后创建的任何对象。如果向数据库中添加了新对象,并且您也希望注册这些对象,则必须再次调用此过程。

实参:

  • schema_name(字符串数组) – 一个或多个完全限定架构名称的数组。

返回: (字符串) 成功或失败消息。

示例:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.register_managed_access_schema(['SAMOOHA_SAMPLE_DATABASE.DEMO']);
Copy

library.register_objects

描述: 授予 Clean Room 访问所有类型的表和视图的权限,使其可以通过调用 provider.link_datasets 链接到 Clean Room。您可以通过调用 library.register_schemalibrary.register_managed_access_schemaprovider.register_db 注册更广泛的对象组。

此过程将对象使用权限授予 SAMOOHA_APP_ROLE,Clean Room 环境使用该角色访问数据。

您必须具有对对象的 MANAGE GRANTS 权限才能调用此过程。此过程不能用于注册数据库。

如果注册基于其他数据库中对象的视图,则还必须授予原生应用程序访问源对象的权限。

实参:

  • object_names(数组) – 完全限定的对象名称数组。然后可以将这些对象链接到 clean room。

返回: (字符串) 成功或失败消息。

示例

要注册表和视图:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.register_objects(
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS',
  'SAMOOHA_SAMPLE_DATABASE.INFORMATION_SCHEMA.FIELDS'
    ]
 );
Copy

library.enable_external_tables_on_account

描述: 允许在此账户的所有 Clean Room 中使用 Iceberg 表或外部表。必须 同时 由提供商和使用者账户中的 ACCOUNTADMIN 调用,以允许通过 任一 账户链接 Iceberg 表或外部表。要将此功能限制在此账户中的特定 Clean Room,请改为调用 enable_external_tables_for_cleanroom

如果成功且所有安全扫描都通过,则会生成 Clean Room 的一个 新补丁版本

实参:

返回: (字符串) 成功或失败消息。如果成功,它将触发安全扫描,并提供安全扫描成功后生成的补丁编号。

示例:

USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.library.enable_external_tables_on_account();
Copy

provider.enable_external_tables_for_cleanroom

描述: 使提供商能够将 Iceberg 表或外部表链接到此账户中的指定 Clean Room。要允许该账户中的所有 Clean Room 使用 Iceberg 表和外部表,请改为调用 enable_external_tables_on_account

如果成功,将生成 Clean Room 的一个 新补丁版本

实参:

  • cleanroom_name(字符串) - Clean Room 名称,提供商可将 Iceberg 表或外部表链接至该 Clean Room。

返回: (字符串) 成功或失败消息。如果成功,它将触发安全扫描,并提供安全扫描成功后生成的补丁编号。

示例:

CALL samooha_by_snowflake_local_db.provider.enable_external_tables_for_cleanroom(
    $cleanroom_name);
Copy

library.unregister_db

描述: 颠倒 register_db 过程,并移除向 SAMOOHA_APP_ROLE 角色和 Snowflake Data Clean Room 本地应用程序授予的数据库级权限。这样还会从 Clean Room UI 中的选择器中删除任何数据库。

实参:

  • db_name(字符串) – 要取消注册的数据库的名称。

返回: (字符串) 成功或失败消息。

示例:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_db('SAMOOHA_SAMPLE_DATABASE');
Copy

library.unregister_schema

描述: 取消注册一个架构,以防止用户将其表和视图链接到 Clean Room。

如果要取消注册托管访问架构(即使用 WITH MANAGED ACCESS 参数创建的架构),请改用 library.unregister_managed_access_schema

实参:

  • schema_name(数组) – 要取消注册的架构。

返回: (字符串) 成功或失败消息。

示例:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_schema(['SAMOOHA_SAMPLE_DATABASE.DEMO']);
Copy

library.unregister_managed_access_schema

描述: 类似于 unregister_schema,但取消注册了使用 WITH MANAGED ACCESS 参数创建的架构。

实参:

  • schema_name(数组) – 要取消注册的托管架构。

返回: (字符串) 成功或失败消息。

示例:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_managed_access_schema(['SAMOOHA_SAMPLE_DATABASE.DEMO']);
Copy

library.unregister_objects

描述: 撤销 Clean Room 对所有类型的表和视图的访问权限。此账户管理的所有 clean room 中的任何用户将无法再使用这些对象。

实参:

  • object_names(数组) – 应该撤销访问权限的完全限定对象名称数组。

返回: (字符串) 成功或失败消息。

示例

要取消注册表和视图:

USE ROLE <ROLE_WITH_MANAGE GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_objects(
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS',
  'SAMOOHA_SAMPLE_DATABASE.INFORMATION_SCHEMA.FIELDS'
    ]
  );
Copy

管理策略

Data Clean Room 中的联接策略与 Snowflake 全域联接策略 不同。仅使用此过程设置 Clean Room 的联接策略;Clean Room 会忽略在 Clean Room 之外的表上设置的联接策略。

详细了解 Clean Room 中的表策略。

provider.view_join_policy

说明: 显示当前应用于 Clean Room 的联接策略。

实参:

  • cleanroom_name(字符串) – 要查询的 Clean Room 的名称。

返回: (表) Clean Room 中所有表或视图的可联接行列表。

示例:

CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);
Copy

provider.set_join_policy

描述: 指定在此 Clean Room 内运行模板时,使用者可以联接哪些列。注意,联接策略是 仅替换,因此如果再次调用过程,新的联接策略会完全替换之前设置的联接策略。

重要

只有 当模板应用 join_policyjoin_and_column_policy JinjaSQL 筛选器来联接行时,才会强制实施联接策略。

备注

Data Clean Room 中的联接策略与 Snowflake 全域联接策略不同。仅使用此过程设置 Clean Room 的联接策略;Clean Room 会忽略在 Clean Room 之外的表上设置的联接策略。

实参:

  • cleanroom_name(字符串) – 应强制实施联接策略的 Clean Room 的名称。

  • table_and_col_names(字符串数组) – 完全限定的列名,格式为 database_name.schema_name.table_or_view_name:column_name。** 注意正确使用 . versus : 标记**

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.set_join_policy(
  $cleanroom_name, 
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
    'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL'
  ]
);
Copy

管理提供商模板

使用以下命令添加此 Clean Room 支持的模板/分析。

provider.view_added_templates

描述: 查看 Clean Room 中提供商添加的模板。没有为此提供商列出所有 Clean Room 中所有模板的方法。

实参:

  • cleanroom_name(字符串) – 要查询的 Clean Room。

返回: (表) – 指定 Clean Room 中可用的模板列表,含每个模板的详细信息。

示例:

CALL samooha_by_snowflake_local_db.provider.view_added_templates($cleanroom_name);
Copy

provider.view_template_definition

描述: 显示有关特定模板的信息。查看提供商模板的使用者应使用 consumer.view_template_Definition

实参:

  • cleanroom_name(字符串) – 具有此模板的 Clean Room 的名称。

  • template_name(字符串) – 要请求相关信息的模板的名称。

返回: 模板定义(字符串)

示例:

CALL samooha_by_snowflake_local_db.provider.view_template_definition(
  $cleanroom_name,
  $template_name);
Copy

provider.add_templates

**描述:**向 Clean Room 添加模板列表。这不会取代现有的模板列表。

实参:

  • cleanroom_name(字符串) – 要添加模板的 Clean Room 的名称。

  • template_names(字符串数组) – 要添加的模板的名称。这些只是 Snowflake 提供的模板。要添加自定义模板,请调用 add_custom_sql_template

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.add_templates(
  $cleanroom_name,
  ['my_custom_template']);
Copy

provider.clear_template

描述: 从 Clean Room 中移除指定模板。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • template_name(字符串) – 要从 Clean Room 中移除的模板的名称。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.clear_template(
  $cleanroom_name,
  'prod_custom_template');
Copy

provider.clear_all_templates

描述: 移除已添加到 Clean Room 的所有模板。

实参:

  • cleanroom_name(字符串) – 要从中移除所有模板的 Clean Room 的名称。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.clear_all_templates($cleanroom_name);
Copy

provider.set_column_policy

描述: 将数据中的哪些列设置为作为非联接行对 Clean Room 中的指定模板可用。必须在此处或者在 set_join_policy 中声明列后,才能在 Clean Room 中使用。此处列出的列可用于模板中的任何位置,但用作联接列除外。列不能同时列在列策略和联接策略中。

默认情况下,表的列策略为空,这意味着在结果中看不到任何列。

此过程是 完全替换 行为,因此每次调用时,都会完全覆盖前面的列列表。

请注意,进行列策略检查的方式是解析为查找任何未经授权的列而要对数据运行的 SQL 查询。使用这些检查可能无法找出含有通配符的查询,因此,设计分析模板时应慎重。如果某些列确实不应该被查询,可以考虑为源表创建一个视图来消除这些敏感列,并改为在该视图中建立链接。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • analysis_and_table_and_cols(字符串数组) – 模板可以使用的列数组。格式为:template_name:full_table_name:column_name

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name,
['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']);

 -- Same example, but using a variable name for the template.
CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name,
[$template_name || ':SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
 $template_name || ':SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
 $template_name || ':SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
Copy

provider.view_column_policy

描述: 列出当前在 Clean Room 中激活的列策略。列策略说明哪些表列可以在哪些模板中显示。

实参: cleanroom_name(字符串)

返回: (表) 哪些列可用于哪些模板。

示例:

CALL samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
Copy

provider.add_custom_sql_template

描述: 将自定义 JinjaSQL 模板添加到 Clean Room。这样,使用者就可以调用模板。了解如何创建自定义模板。

您可以多次调用该 API 将多个自定义模板添加到 Clean Room。该过程会覆盖此 Clean Room 中之前的同名模板。

如果使用者使用模板 将结果返回给提供商,则命令必须满足以下要求:

  • 自定义模板的名称必须以字符串 activation 开头。例如,activation_custom_template

  • 模板必须创建以 cleanroom.activation_data_ 开头的表。 例如,CREATE TABLE cleanroom.activation_data_analysis_results AS ...

  • 模板必须返回在定义(即追加到 cleanroom.activation_data_ 的字符串)中创建的表名的唯一部分。例如,return 'data_analysis_results'

实参:

  • cleanroom_name(字符串) – 适用此模板的 Clean Room 的名称。

  • template_name(字符串) – 模板的名称。必须全部是小写字母、数字、空格或下划线。激活模板的名称必须以“activation”开头。

  • 模板(字符串) – JinjaSQL 模板。

  • sensitivity(浮点数,可选) – 如果为该 Clean Room 启用了差分隐私,则它会控制应用于该模板返回的数据的差分隐私噪声量。必须是大于 0 的数字。默认值为 1.0。差分隐私任务必须在此 Clean Room 中运行,此实参才能生效。

  • consumer_locators(字符串数组,可选) – 一个或多个账户定位器的数组。如果存在,此模板将仅添加到这些账户的 Clean Room。您可以稍后通过调用 provider.restrict_template_options_to_consumers 来修改此列表。如果不指定使用者列表,则所有使用者都可以在指定的 Clean Room 中使用自定义模板。

  • is_obfuscated(布尔,可选) - 若为 TRUE,则可防止使用者查看模板正文。请注意,您必须使用 Snowflake Enterprise Edition 或更高版本才能运行混淆模板。如果此模板用于提供商运行分析,则在更改 is_obfuscated 状态时,使用者必须重新批准分析请求。is_obfuscated 不能与 敏感性 一起使用。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.add_custom_sql_template(
    $cleanroom_name, 'prod_custom_template', 
    $$
SELECT 
    identifier({{ dimensions[0] | column_policy }}) 
FROM 
    identifier({{ my_table[0] }}) c 
    inner join 
    identifier({{ source_table[0] }}) p 
    ON 
        c.identifier({{ consumer_id  }}) = identifier({{ provider_id | join_policy }}) 
    {% if where_clause %}
      WHERE {{ where_clause | sqlsafe | join_and_column_policy }}
    {% endif %};
    $$);
Copy

provider.add_ui_form_customizations

描述: 在 Clean Room UI 中运行 Clean Room 时,定义 Clean Room 中模板的自定义表单。这在允许使用者选择表或列等模板参数时非常有用。至少,必须在 template_information 实参中为 display_namedescriptionmethodology 指定值。

建议将表选择元素置于列选择元素之前,尤其是当列选择器根据表选择进行填充时。

了解如何为自定义模板设计用户输入表单。

调用此函数后必须更新 Clean Room。 如果在更新 UI 后未调用 provider.create_or_update_cleanroom_listing,则协作者将看不到任何更新。

实参:

  • cleanroom_name(字符串):包含此模板的 Clean Room 名称。提交的表仅适用于指定 Clean Room 中的指定模板。

  • template_name (String):此 UI 适用的模板的名称。这不是使用 template_information.display_name 字段指定的用户可见的标题。

  • template_information (Dict):有关要在 Clean Room UI 中显示的模板的元信息。必须或可以定义以下属性:

    • display_name必填):在 Clean Room UI 中显示模板的名称。

    • description必填):模板的描述。

    • methodology必填):任何实参的描述,以及结果。

    • warehouse_hints (对象):建议使用哪种类型的仓库来运行分析。这是一个具有以下字段的对象:

      • warehouse_size:请参阅 CREATE WAREHOUSE 中的 warehouse_size,了解有效值。

      • snowpark_optimized (布尔):是否使用 Snowpark 优化型仓库 来处理查询。对于大多数机器学习用例,Snowflake 建议设置为 TRUE。

    • render_table_dropdowns (对象):是否显示默认下拉列表,让用户选择在查询中使用哪个提供商或使用者表。这是一个具有以下字段的对象:

      • render_consumer_table_dropdown(布尔) 如果为 TRUE,则显示默认使用者表选择器。如果为 FALSE,则隐藏使用者表选择器。模板可以使用 my_table 模板变量以列表形式访问所选值。如果任何元素设置了 references=CONSUMER_TABLES,则默认值为 FALSE,否则默认值为 TRUE。

      • render_provider_table_dropdown(布尔) 如果为 TRUE,则显示默认提供商表选择器。如果为 FALSE,则隐藏提供商表选择器。模板可以使用 source_table 模板变量以列表形式访问所选值。如果任何元素设置了 references=PROVIDER_TABLES,则默认值为 FALSE,否则默认值为 TRUE。

    • activation_template_name(字符串) 此 Clean Room 中激活模板的名称。使用不带任何 cleanroom 前缀的模板名称。了解激活模板相关信息

    • enabled_activations(字符串) 启用了哪种激活。可能的值:consumerprovider。没有默认值;如果指定了 activation_template_name,则必须提供此实参。

  • 详细信息(字典,可选):定义用户可配置的输入字段,将值传递给模板。这是一对密钥对象对的字典,每对代表一个表单元素。 密钥是链接的 JinjaSQL 模板可用的变量名称。该值是定义表单元素的对象。如果模板变量未在此处定义等效表单元素,则 Clean Room 会自动生成默认表单元素。每个对象都可以定义以下字段:

    <field_name>: {
      ['display_name': <string>,]
      ['order': <number>,]
      ['description': <string>,]
      ['type': <enum>,]
      ['default': <value>,]
      ['choices': <string array>,]
      ['infoMessage': <string>,]
      ['size': <enum>,]
      ['required': <bool>,]
      ['group': <string>,]
      ['references': <array of string>,]
      ['provider_parent_table_field':  <string>,]
      ['consumer_parent_table_field': <string>]
    }
    
    Copy
    • display_name:在 UI 表单中为此项添加标签文本。

    • order:此元素在表单中应按从 1 开始的顺序显示。如果未指定,则该元素将按照其在对象中出现的顺序呈现。

    • description:元素用途的描述,显示在标签下方。请在此处提供简短的帮助说明或示例。如果未提供,则不会显示任何内容。

    • type:UI 元素的类型。 如果为该输入字段指定了 引用,则省略此条目(系统会自动确定其类型)。支持的值:

      • any (默认):常规文本输入字段

      • boolean:真/假选择器

      • integer:使用箭头更改数字

      • multiselect:从下拉列表中选择多个项目

      • dropdown:从下拉列表中选择一个项目

      • date:日期选择器

    • default:该元素的默认值

    • choices(字符串数组) 下拉列表和多选元素选项列表

    • infoMessage:元素旁显示的信息悬停文本。如果未提供,则不显示任何工具提示。

    • size:元素大小。支持的值:XSSMLXL

    • required:用户是否需要某个值。指定 TRUE 或 FALSE。

    • group:组名,用于对 UI 中的项目进行分组。对 UI 中应分组在一起的项目使用相同的组名。如果隐藏默认下拉列表,则可以使用自定义模板中的 {{ source_table }}{{ my_table}} 特殊实参,然后定义自己的下拉列表,其中包含所需的表。有关在定义自定义模板时使用这些特殊变量的详细信息,请参阅 provider.add_custom_sql_template

    • references:使用 Clean Room 中指定类型的表或列填充下拉列表。如果使用,则 type 必须为 multiselectdropdown。支持以下字符串值:

      • PROVIDER_TABLES:列出 Clean Room 中的所有提供商表。如果指定, render_table_dropdowns.render_provider_table_dropdown 必须为 FALSE。

      • PROVIDER_JOIN_POLICY:列出当前在 provider_parent_table_field 元素中选中的表的提供商联接策略中的所有列。

      • PROVIDER_COLUMN_POLICY:列出当前在 provider_parent_table_field 元素中选中的模板和表的提供商列策略中的所有列。

      • PROVIDER_ACTIVATION_POLICY:列出提供商激活策略中的所有列。

      • CONSUMER_TABLES:列出 Clean Room 中的所有使用者表。如果指定, render_table_dropdowns.render_consumer_table_dropdown 必须为 FALSE。

      • CONSUMER_COLUMNS:列出使用者表中 consumer_parent_table_field 指定的所有列。您不应在提供商运行的模板中使用使用者列引用,因为使用者可能会将联接和列策略应用于这些列;而应对提供商运行的模板使用 CONSUMER_JOIN_POLICYCONSUMER_COLUMN_POLICY

      • CONSUMER_JOIN_POLICY:从 consumer_parent_table_field 元素中所选的表中列出使用者联接策略中的所有列。

      • CONSUMER_COLUMN_POLICY:列出当前在 consumer_parent_table_field 字段中选中的模板和表的使用者列策略中的所有列。

    • provider_parent_table_field:用户选择提供商表的 UI 元素的名称,此处不提供表名本身。仅在 references 设置为 PROVIDER_COLUMN_POLICYPROVIDER_JOIN_POLICY 时使用。要引用默认提供商表选择器,请在此处指定 source_table,并将 render_table_dropdowns.render_provider_table_dropdown 设置为 TRUE。

    • consumer_parent_table_field:用户选择使用者表的 UI 元素的名称,此处不提供表名本身。仅在 references 设置为 CONSUMER_COLUMNSCONSUMER_JOIN_POLICYCONSUMER_COLUMN_POLICY 时使用。要引用默认使用者表选择器,请在此处指定 my_table,并将 render_table_dropdowns.render_provider_table_dropdown 设置为 TRUE。

  • output_config(字典):定义如何在 Web 应用程序中以图形方式显示模板结果。如果未提供,则不以图形显示结果,仅以表格显示结果。如果不需要图形,请为此实参提供一个空对象 {}。允许的字段:

    • measure_columns:包含要在 Clean Room UI 生成的图形中使用的度量值和维度的列的名称。

    • default_output_type:显示结果的默认格式。如果数据格式正确,则用户通常可以更改 UI 中的显示格式。支持的类型:

      • TABLE(默认) 表格格式

      • BAR:条形图,适合比较不同类别的数据。

      • LINE:折线图,适合显示随时间变化的趋势或连续数据。

      • PIE:饼状图,适合显示比例或百分比。

下表显示了 details 对象中允许存在冲突的值的值矩阵:

type

references

provider_parent_table_field

consumer_parent_table_field

render_provider_table_dropdown

render_consumer_table_dropdown

multiselectdropdown

PROVIDER_TABLES

未获准

未获准

FALSE

TRUE 或 FALSE

PROVIDER_JOIN_POLICY

source_table

未获准

TRUE

TRUE 或 FALSE

PROVIDER_JOIN_POLICY

parent field name

未获准

TRUE 或 FALSE

TRUE 或 FALSE

PROVIDER_COLUMN_POLICY

source_table

未获准

TRUE

TRUE 或 FALSE

PROVIDER_COLUMN_POLICY

parent field name

未获准

TRUE 或 FALSE

TRUE 或 FALSE

CONSUMER_TABLES

未获准

未获准

TRUE 或 FALSE

FALSE

CONSUMER_COLUMNS

未获准

my_tableparent field name

TRUE 或 FALSE

TRUE

CONSUMER_JOIN_POLICY

未获准

my_tableparent field name

TRUE 或 FALSE

TRUE

CONSUMER_COLUMN_POLICY

未获准

my_tableparent field name

TRUE 或 FALSE

TRUE

PROVIDER_ACTIVATION_POLICY

未获准

未获准

TRUE 或 FALSE

TRUE 或 FALSE

返回: (字符串) 成功或失败消息。

示例:

-- Specify the display name, description, and warehouse, and hide the default table dropdown lists. 
-- Define the following two fields in the UI:
--   A provider table selector that shows all provider tables. Chosen tables can be accessed by the template with the variable 'a_provider_table'
--     (This dropdown list is equivalent to setting `render_table_dropdowns.render_provider_table_dropdown: True`)
--   A column selector for the tables chosen in 'a_provider_table'. Chosen columns can be accessed by the template with the variable 'a_provider_col'

CALL samooha_by_snowflake_local_db.provider.add_ui_form_customizations(
    $cleanroom_name,
    'prod_custom_template',
    {
        'display_name': 'Custom Analysis Template',
        'description': 'Use custom template to run a customized analysis.',
        'methodology': 'This custom template dynamically renders a form for you to fill out, which are then used to generate a customized analysis fitting your request.',
        'warehouse_hints': {
            'warehouse_size': 'xsmall',
            'snowpark_optimized': FALSE
        },
        'render_table_dropdowns': {
            'render_consumer_table_dropdown': false,
            'render_provider_table_dropdown': false
        },
        'activation_template_name': 'activation_my_template',
        'enabled_activations': ['consumer', 'provider']  
    },    
    {
        'a_provider_table': {
            'display_name': 'Provider table',
            'order': 3,
            'description': 'Provider table selection',
            'size': 'S',
            'group': 'Seed Audience Selection',
            'references': ['PROVIDER_TABLES'],
            'type': 'dropdown'
        },
        'a_provider_col': {
            'display_name': 'Provider column',
            'order': 4,
            'description': 'Which col do you want to count on',
            'size': 'S',
            'group': 'Seed Audience Selection',
            'references': ['PROVIDER_COLUMN_POLICY'],
            'provider_parent_table_field': 'a_provider_table',
            'type': 'dropdown'
        }
    },
    {
        'measure_columns': ['col1', 'col2'],
        'default_output_type': 'PIE'
    }
);
Copy

provider.restrict_template_options_to_consumers

描述: 控制哪些用户可以访问给定 Clean Room 中的给定模板。此过程将覆盖之前由任何其他过程为 Clean Room/模板对指定的任何访问列表。

备注

通过调用此过程创建的限制在 Clean Room UI 中的行为可能不符合预期。您不应在可用于 Clean Room UI 的 Clean Room 中调用此过程。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • access_details(JSON 对象) – 模板的名称以及可以在该 Clean Room 中访问该模板的用户。如果指定了模板,则只有此处列出的用户才能在该 Clean Room 中访问该模板。这是一个对象,每个模板有一个子对象,格式如下:{'template_name': ['user1_locator','user2_locator','userN_locator']}

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.restrict_template_options_to_consumers(
    $cleanroom_name,
    {
        'prod_template_1': ['CONSUMER_1_LOCATOR', 'CONSUMER_2_LOCATOR']
    }
);
Copy

使用者自定义模板

以下 APIs 让您可以批准或拒绝使用者为 Clean Room 添加模板的请求。仅当提供商批准使用者添加模板的请求时,才会将使用者定义的模板添加到 Clean Room。有关更多信息,请参阅 使用者编写的自定义模板

provider.list_pending_template_requests

描述: 列出想要将使用者定义的模板添加到 Clean Room 的使用者提出的所有未经批准的请求。其中包括待处理、已批准和已拒绝的请求。使用此过程可检查待处理的请求,并对其进行批准 (provider.approve_template_request) 或拒绝 (provider.reject_template_request)。

实参:

  • cleanroom_name(字符串) – 查看使用者要求向此 Clean Room 添加模板的请求。

返回: 包含以下值的表:

  • request_id(字符串) – 接受或拒绝请求所需的请求 ID。

  • consumer_locator(字符串) – 发送请求者的账户定位器。

  • template_name(字符串) – 使用者提供的模板的名称。

  • template_definition(字符串) – 使用者提出的模板的完整定义。

示例:

CALL samooha_by_snowflake_local_db.provider.list_pending_template_requests($template_name);
Copy

provider.list_template_requests

描述: 列出所有想要将使用者定义的模板添加到 Clean Room 的使用者的请求。其中包括待处理、已批准和已拒绝的请求。使用此选项可检查待处理请求并审批 (provider.approve_template_request) 或拒绝 (provider.reject_template_request)。

实参:

  • cleanroom_name(字符串) – 查看使用者要求向此 Clean Room 添加模板的请求。

返回: 包含以下值的表:

  • request_id(字符串) – 接受或拒绝请求所需的请求 ID。

  • consumer_identifier(字符串) – 发送请求者的账户定位器。

  • template_name(字符串) – 使用者提供的模板的名称。

  • template_definition(字符串) – 使用者提出的模板的完整定义。

  • status(字符串) – 请求的状态:PENDING、APPROVED、REJECTED。

示例:

CALL samooha_by_snowflake_local_db.provider.list_template_requests($template_name);
Copy

provider.approve_template_request

描述: 批准为 Clean Room 添加模板的请求。

实参:

  • cleanroom_name(字符串) – 用户要添加模板的 Clean Room 的名称。

  • request_id(字符串) – 要批准的请求的 ID。调用 provider.list_template_requests 查看请求 IDs。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.approve_template_request($cleanroom_name, 
    '815324e5-54f2-4039-b5fb-bb0613846a5b');
Copy

provider.approve_multiple_template_requests

描述: 批准多个使用者向 Clean Room 添加模板的请求。所有请求必须针对一个 Clean Room。

实参:

  • cleanroom_name(字符串) - 此请求适用的 Clean Room 名称。

  • request_ids(字符串数组) - 要批准的所有模板请求的 IDs。要获取请求 ID,请调用 provider.list_template_requests

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.approve_multiple_template_requests(
  $cleanroom_name, 
  ['cfd538e2-3a17-48e3-9773-14275e7d2cc9',
   '2982fb0a-02b7-496b-b1c1-56e6578f5eac']);
Copy

provider.reject_template_request

描述:拒绝为 Clean Room 添加模板的请求。

实参:

  • cleanroom_name(字符串) – 用户要添加模板的 Clean Room 的名称。

  • request_id(字符串) – 要拒绝的请求的 ID。调用 provider.list_template_requests 查看请求 IDs。

  • reason_for_rejection(字符串) – 拒绝请求的原因。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.reject_template_request(
  $cleanroom_name,
  'cfd538e2-3a17-48e3-9773-14275e7d2cc9',
  'Failed security assessment');
Copy

provider.reject_multiple_template_requests

描述: 拒绝多个使用者向 Clean Room 添加模板的请求。所有请求必须针对同一个 Clean Room。

实参:

  • cleanroom_name(字符串) - 此请求适用的 Clean Room 名称。

  • rejected_templates(对象数组) - 包含以下字段的对象数组,每次拒绝一个:

    • request_id(字符串) – 要拒绝的请求的 ID。要获取请求 ID,请调用 provider.list_template_requests

    • reason_for_rejection(字符串) - 自由文本描述,说明拒绝请求的原因。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.reject_multiple_template_requests($cleanroom_name,
  [OBJECT_CONSTRUCT('request_id', '815324e5-54f2-4039-b5fb-bb0613846a5b', 'reason_for_rejection', 'Failed security assessment'),
   OBJECT_CONSTRUCT('request_id', '2982fb0a-02b7-496b-b1c1-56e6578f5eac', 'reason_for_rejection', 'Some other reason')
  ]);
Copy

模板链

使用以下命令创建和管理 模板链

provider.add_template_chain

描述: 创建新的模板链。模板在添加到模板链之前必须存在。创建模板链后,将无法修改,但您可以创建一个同名的新模板链以覆盖旧模板链。

实参:

  • cleanroom_name(字符串) – 应添加模板链的 Clean Room 的名称。

  • template_chain_name(字符串) – 模板链的名称。

  • templates(对象数组) - 对象数组,每个模板一个。该对象可包含以下字段:

    • template_name(字符串)– 指定要添加到模板链的模板。模板必须已经通过调用 provider.add_template_chain 添加到 Clean Room。

    • cache_results(布尔)– 确定模板的结果是否临时保存,以便模板链中的其他模板可以访问这些结果。要缓存结果,请指定 TRUE。

    • output_table_name(字符串)– 如果 cache_results = TRUE,则指定存储模板结果的 Snowflake 表的名称。

    • jinja_output_table_param(字符串)– 如果 cache_results = TRUE,则指定其他模板必须包括的 Jinja 参数的名称,以接受 output_table_name 中存储的结果。

    • cache_expiration_hours(整型)– 如果 cache_results = TRUE,则指定删除缓存中结果之前的小时数。当缓存过期时,那么下次执行模板链时,缓存会使用模板的结果刷新。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.add_template_chain(
  $cleanroom_name,
  'my_chain',
  [
    {
      'template_name': 'crosswalk',
      'cache_results': True,
      'output_table_name': 'crosswalk',
      'jinja_output_table_param': 'crosswalk_table_name',
      'cache_expiration_hours': 2190
    },
    {
      'template_name': 'transaction_insights',
      'cache_results': False
    }
  ]
);
Copy

provider.view_added_template_chains

描述: 列出指定 Clean Room 中的模板链。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

返回: (表) 添加到此 Clean Room 的所有模板链的描述。

示例:

CALL samooha_by_snowflake_local_db.provider.view_added_template_chains($cleanroom_name);
Copy

provider.view_template_chain_definition

描述: 返回模板链的定义。

实参:

  • cleanroom_name(字符串) – 与此模板链关联的 Clean Room 的名称。

  • template_chain_name(字符串) – 与此 Clean Room 关联的模板链的名称。

返回: (表) 指定模板链的描述。

示例:

CALL samooha_by_snowflake_local_db.provider.view_template_chain_definition(
  $cleanroom_name,
  'my_chain');
Copy

provider.clear_template_chain

**描述:**从指定的 Clean Room 删除指定的模板链。链不会存储在任何位置,因此如果要重新创建链,则必须从头开始重新创建。

实参:

  • *cleanroom_name(字符串) – 分配给此模板链的 Clean Room。

  • template_chain_name(字符串) – 要从此 Clean Room 移除的模板链。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.clear_template_chain($cleanroom_name, 'my_chain');
Copy

多提供商分析

这些过程支持 多提供商分析

provider.enable_multiprovider_computation

描述: 在指定用户提出请求时,此过程允许将您的 Clean Room 中的表与指定模板结合使用,也可以与指定 Clean Room 中的表结合使用。此过程让使用者能够对多个 Clean Room 中的数据运行查询。此过程不会自动批准这些请求,但通过将请求记录到 此 Clean Room 的多提供商请求日志,可以开始对指定用户和 Clean Room 进行手动或自动批准流程。

即使在为此 Clean Room 调用 enable_multiprovider_computation 之前,任何使用 consumer.prepare_multiprovider_flow 对此 Clean Room 进行的调用都将保存并可见。

要让使用者能够访问您账户中的多个 Clean Room,请在 cleanroom_name 实参中指定一个 Clean Room,并在 approved_other_cleanrooms 实参中指定其他 Clean Room。

此过程要求在 Clean Room 中设置联接策略。

记录请求后,将根据给定用户和查询的请求流程进行批准。

请求记录启动后无法将其禁用,但是您可以暂停对给定用户的自动批准(如果您通过调用 provider.suspend_multiprovider_tasks 授予了权限),然后不再批准任何其他请求。

实参:

  • cleanroom_name(字符串) – 您拥有的 Clean Room 的名称。该 Clean Room 中的所有数据均可通过 consumer_account 在多提供商请求中与 approved_other_cleanrooms 中列出的 Clean Room 共享。

  • consumer_account(字符串) – 可以提出请求的使用者的账户定位器,如果获得批准,则结合 approved_other_cleanroom 中列出的任何 Clean Room 的数据,针对此 Clean Room 中的任何表运行查询。

  • approved_other_cleanrooms(字符串数组) – 完全限定 Clean Room 名称数组,此 Clean Room 的数据可以与之组合。每个条目的格式为 provider_org_name.provider_account_name.cleanroom_name重要事项: 在每个 Clean Room 描述中提供 账户名称,而 不是 账户定位器

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.enable_multiprovider_computation(
  $cleanroom_name,
  $consumer_account_locator,
  <org_name>.<account_locator>.<cleanroom_name>);
Copy

provider.view_multiprovider_requests

描述: 显示来自给定账户和 Clean Room 的所有多提供商分析请求。其中包括批准和拒绝的请求。提供商可以使用此过程来轮询请求,以便通过调用 provider.process_multiprovider_request 手动批准这些请求,也可以作为在给定 Clean Room 中查看来自给定使用者的所有请求的一种方式。

您必须为此 Clean Room 和使用者账户调用 enable_multiprovider_computation,然后才能调用 view_multiprovider_requests

实参:

  • cleanroom_name(字符串) – 显示此 Clean Room 中来自指定使用者的请求。

  • consumer_account(字符串) – 显示此指定 Clean Room 中来自此使用者账户定位器的请求。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.view_multiprovider_requests(
  $cleanroom_name,
  $consumer_locator);
Copy

provider.process_multiprovider_request

描述: 如果所有检查均通过,则批准执行指定的多提供商查询。检查内容包括请求的期限,以及提供商在之前调用 provider.enable_multiprovider_computation 时是否批准了该请求。使用者仍必须调用 consumer.execute_multiprovider_flow 才能运行该查询。如果未获批准,请求将在四小时后删除。

默认情况下,必须使用此过程处理所有多提供商请求。如果您希望该使用者在此 Clean Room 中提出的所有请求都自动获得批准,请为 request_id 指定 -1。如果您希望所有使用者在此 Clean Room 中提出的所有请求获得批准,请调用 provider.resume_multiprovider_tasks了解如何撤销先前批准的请求。

评估请求后,将请求和评估状态写入到 此 Clean Room 的日志表

实参:

  • *cleanroom_name(字符串) – 使用者要求将其包含在多提供商分析中的 Clean Room 的名称。

  • consumer_account(字符串) – 请求多提供商分析的用户的使用者账户定位器。此定位器必须已获批准用于此 Clean Room 和在调用 provider.enable_multiprovider_computation 的请求中列出的其他 Clean Room。

  • request_id(字符串) – 要批准的请求 ID,来自 provider.view_multiprovider_requests。传入 -1 以批准此 Clean Room 中此使用者的所有请求。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.process_multiprovider_request(
  $cleanroom_name_1,
  $consumer_account_locator,
  $request_id);
Copy

provider.suspend_multiprovider_tasks

描述: 停止在指定 Clean Room 的多提供商查询中的自动审核和批准(针对符合条件的查询)。 Clean Room 仍启用了多提供商查询,但现在每个请求都必须通过调用 provider.process_multiprovider_request 得到提供商的明确批准。

所有 Clean Room 的默认状态为禁用多提供商自动批准。要启用它,请调用 provider.resume_multiprovider_tasks

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • consumer_account(字符串) – 使用者的账户定位器,应对此 Clean Room 中的所有模板暂停该使用者的多提供商请求。此用户在此 Clean Room 中提出的请求稍后将删除。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.suspend_multiprovider_tasks(
  $cleanroom_name,
  $consumer_locator);
Copy

provider.resume_multiprovider_tasks

描述: 支持在给定 Clean Room 中自动审查和批准(符合条件的查询)给定用户的多提供商分析。默认情况下,Clean Room 的自动审查处于禁用状态。

要停止自动批准,请调用 provider.suspend_multiprovider_tasks

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • consumer_account(字符串) – 使用者的账户定位器,在此 Clean Room 中该使用者的多供应商请求现在将排队等待。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.resume_multiprovider_tasks(
  $cleanroom_name,
  $consumer_locator);
Copy

激活

激活 意味着将结果导出到提供商、使用者或第三方。阅读更多关于激活的信息。

provider.set_activation_policy

描述: 定义哪些提供商列可以在激活模板中使用。只有激活策略中列出的列才能从提供商的数据集中激活。不设置激活策略会阻止任何提供商数据被激活。

调用此过程会清除提供商先前设置的任何激活策略。

实参:

  • cleanroom_name(字符串) – 应允许激活的 Clean Room 的名称。

  • columns(字符串数组) – 只有此处列出的列才能用于此 Clean Room 的激活模板。列名称格式为 template_name:fully_qualified_table_name:column_name注意正确使用点 . 和冒号 : 标记。

返回: (字符串) 成功或失败消息。

示例:

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' ]);
Copy

provider.update_activation_warehouse

描述: 指定在提供商激活中将结果解密到输出表时应使用的仓库大小。用于解密的仓库是 DCR_ACTIVATION_WAREHOUSE。提供商为此仓库付款。

实参:

  • size(字符串) – 仓库大小。从 CREATE WAREHOUSE 命令中选择其中一个 WAREHOUSE_SIZE 值。

返回: (字符串) 成功消息。

示例:

CALL samooha_by_snowflake_local_db.provider.update_activation_warehouse('LARGE');
Copy

provider.setup_provider_activation_share_mount_task

描述: 当提供商的账户中未安装 Clean Room UI 时,允许提供商激活操作。

在通过 provider.add_consumers 添加使用者后调用此过程。仅当实现提供商激活 您(提供商)未安装 Clean Room UI 时,才会调用此过程。(使用者是否已安装 UI 并不重要。)

这会启动线程来异步挂载提供商激活所需的使用者共享。此代码不是同步挂载共享并屏蔽代码,而是异步挂载共享并定期重新检查是否有新的协作者。您只需要调用一次,以后可以添加其他协作者,无需再次调用此过程。

实参:

  • frequency_minutes(整数) – 在此 Clean Room 中重新检查新使用者的频率,以便为其挂载共享。推荐值为 15。

返回: (字符串) 成功消息。

示例:

CALL samooha_by_snowflake_local_db.provider.setup_provider_activation_share_mount_task(15);
Copy

dcr_health.provider_run_provider_activation_history

描述: 返回指定 Clean Room 的提供商激活请求历史记录。显示了由提供商和使用者发起的提供商激活请求。此过程提供了额外的信息,以帮助调试提供商激活方面的问题。

实参:

  • cleanroom_name(字符串) – 请求激活的 Clean Room 的名称。您必须是此 Clean Room 中的提供商或使用者。

返回: (表) – 激活请求列表,其中包含有关每个请求的信息,包括模板和分段名称、状态、使用者账户定位器以及请求返回的任何错误消息。

示例:

CALL samooha_by_snowflake_local_db.dcr_health.provider_run_provider_activation_history(
  $cleanroom_name);
Copy

以提供商身份运行分析

了解如何运行提供商分析。

provider.enable_provider_run_analysis

描述: 使提供商(Clean Room 创建者)能够在指定的 Clean Room 中运行分析。默认处于禁用状态。然后,使用者必须调用 consumer.enable_templates_for_provider_run 来启用 Clean Room 中特定模板的提供商运行分析。之后,提供商可通过调用 provider.submit_analysis_request 运行分析。

了解更多有关提供商运行分析的信息。

重要

此过程必须在 provider.add_consumers 之后、使用者安装 Clean Room 之前调用。如果使用者在安装 Clean Room 后更改了此配置,则必须重新安装 Clean Room 以反映新的配置。

实参:

  • *cleanroom_name(字符串) – 应启用提供商运行分析的 Clean Room 的名称。

  • consumer_accounts(字符串数组) – 所有向此 Clean Room 添加数据的使用者账户的账户定位器。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.enable_provider_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR>']);
Copy

provider.disable_provider_run_analysis

描述: 阻止提供商(Clean Room 创建者)在 Clean Room 中运行分析(默认已禁用)。

重要

此过程必须在 provider.add_consumers 之后、使用者安装 Clean Room 之前调用。如果用户在安装 Clean Room 后更改了此配置,则需要重新安装 Clean Room 以反映新的配置。

实参:

  • *cleanroom_name(字符串) – 应禁用提供商运行分析的 Clean Room 的名称。

  • consumer_account_locator(字符串) – 传递给 provider.enable_provider_run_analysis 的相同使用者账户名称列表。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.disable_provider_run_analysis(
  $cleanroom_name,
  ['<CONSUMER_ACCOUNT_LOCATOR>']);
Copy

library.is_provider_run_enabled

描述: 检查此 Clean Room 是否允许提供商运行分析。

实参:

  • cleanroom_name(字符串) – 要检查的 Clean Room 的名称。

返回: (字符串) 此 Clean Room 是否允许提供商运行分析。

示例:

CALL samooha_by_snowflake_local_db.library.is_provider_run_enabled($cleanroom_name)
Copy

provider.view_warehouse_sizes_for_template

描述: 使用给定模板查看提供商运行分析中可用的仓库大小和类型列表。使用者必须先在调用 consumer.enable_templates_for_provider_run 时填充列表。

实参:

  • consumer_account(字符串) – 将批准提供商运行请求的使用者的账户定位器。

  • cleanroom_name(字符串) – Clean Room 的名称。

  • template_name(字符串) – 提供商想要运行的模板的名称。

  • consumer_account(字符串) – 将批准提供商运行请求的使用者的账户定位器。

返回: 允许的仓库大小和类型的表。支持的仓库类型和大小字符串是 CREATE WAREHOUSE 命令中 WAREHOUSE_TYPE 和 WAREHOUSE_SIZE 属性使用的仓库类型和大小字符串。

示例:

CALL samooha_by_snowflake_local_db.PROVIDER.VIEW_WAREHOUSE_SIZES_FOR_TEMPLATE(
  $cleanroom_name,
  $template_name,
  $consumer_account_loc);
Copy

provider.submit_analysis_request

描述: 提交分析,以便在 Clean Room 中运行。调用此过程之前,必须满足以下所有条件:

模板在 Clean Room 内运行,结果安全地存储在 Clean Room 内。结果已加密,因此只有提供商可以看到结果。

实参:

  • cleanroom_name(字符串) – 应在其中运行模板的 Clean Room 的名称。

  • consumer_account_locator(字符串) – 此 Clean Room 中允许通过调用 consumer.enable_templates_for_provider_run 进行提供商运行分析的使用者的账户定位器。

  • template_name(字符串) – 要运行的模板的名称。

  • provider_tables(数组) – 要提供给模板的提供商表列表。此列表将填充 source_table 数组变量。

  • consumer_tables(数组) – 要提供给模板的使用者表列表。此列表将填充 my_table 数组变量。

  • analysis_arguments(对象) – JSON 对象,其中每个键都是您创建的模板中使用的实参名称。如果您想使用特定的仓库类型和大小,请选择 provider.view_warehouse_sizes_for_template 列出的类型和大小,然后使用以下字段指定它们:

    • warehouse_type字符串)– 仓库类型,使用者支持将其用于通过指定模板进行的提供商运行分析。

    • warehouse_size字符串)– 仓库大小,使用者支持将其用于通过指定模板进行的提供商运行分析。

返回: (字符串) 用于检查请求状态以及访问结果的请求 ID。保存此 ID,因为您将需要使用它来查看分析结果。

示例:

CALL samooha_by_snowflake_local_db.provider.submit_analysis_request(
    $cleanroom_name, 
    '<CONSUMER_ACCOUNT>',
    'prod_overlap_analysis', 
    ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], 
    ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], 
    object_construct(       
      'dimensions', ['c.REGION_CODE'],        
      'measure_type', ['AVG'],           
      'measure_column', ['c.DAYS_ACTIVE'],
      'warehouse_type', 'STANDARD',        -- If this type and size pair were not listed by view_warehouse_sizes_for_template,
      'warehouse_size', 'LARGE'            -- the request will automatically fail.
    ));
Copy

provider.check_analysis_status

描述: 提供商调用此过程以检查提供商分析请求的状态。在开始查看请求状态之前,可能会有相当长的延迟。当分析标记为完成后,调用 provider.get_analysis_result 可查看结果。

实参:

  • cleanroom_name(字符串) – 在其中提出请求的 Clean Room 的名称。

  • request_id(字符串) – 由 provider.submit_analysis_request 返回的请求的 ID。

  • consumer_account_locator(字符串) – 向其发送请求的使用者的账户定位器。

返回: (字符串) 请求的状态,其中 COMPLETED 表示成功完成分析。可能的状态:

  • IN-PROGRESS:正在进行分析。

  • FAILED:分析执行过程中出现问题。

  • COMPLETED:分析已完成。

  • NOT FOUND:提供的实参没有产生任何结果(例如,错误的请求 ID)。

示例:

-- It can take up to 2 minutes for this to pick up the request ID after the initial request
CALL samooha_by_snowflake_local_db.provider.check_analysis_status(
    $cleanroom_name, 
    $request_id, 
    '<CONSUMER_ACCOUNT>'
);
Copy

provider.get_analysis_result

描述: 获取提供商运行分析的结果。您必须等到分析状态列为 COMPLETED 后才能得到结果。结果在 Clean Room 无限期存在。

实参:

  • cleanroom_name(字符串) – 向其发送请求的 Clean Room 的名称。

  • request_id(字符串) – 由 submit_analysis_request 返回的请求的 ID。

  • consumer_account_locator(字符串) – 传递到 submit_analysis_request 中的使用者的账户定位器。

返回: (表) 查询结果。

示例:

CALL samooha_by_snowflake_local_db.provider.get_analysis_result(
    $cleanroom_name, 
    $request_id, 
    $locator
);
Copy

管理 Clean Room 共享

使用以下命令,管理与使用者共享 Clean Room。

provider.view_consumers

描述: 列出获准访问 Clean Room 的使用者。它不会显示使用者是否已安装 Clean Room。

实参:

  • cleanroom_name(字符串) – 关注的 Clean Room。

返回: (表) – 可以访问 Clean Room 的使用者账户列表。

示例:

CALL samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name);
Copy

provider.add_consumers

描述: 授予指定用户访问指定 Clean Room 的权限。Clean Room 可以通过 Clean Room UI 和 API 访问。此操作不会覆盖以前调用的使用者列表。Clean Room 访问权限授予特定用户,而不是整个账户。使用者账户必须与提供商位于同一 Snowflake 区域,才能访问 Clean Room。您可以通过调用 select current_region(); 来检查您所在的区域

您可以通过调用 provider.view_consumers 来查看当前的使用者列表。

实参:

  • cleanroom_name(字符串) – 与指定用户共享的 Clean Room 名称。用户可以使用 Clean Room API 或 UI 安装 Clean Room。

  • consumer_account_locators(字符串) – 由 CURRENT_ACCOUNT 返回的,以逗号分隔的使用者账户定位器列表。此列表应包含与 consumer_account_names 中数量相同、顺序相同的条目。

  • consumer_account_names(字符串) – 可通过调用 CURRENT_ORGANIZATION_NAME 检索的,格式为 {org_name}.{account_name} Org name,以逗号分隔的 使用者数据共享账户 IDs 列表。通过调用 CURRENT_ACCOUNT_NAME 可检索 账户名称。此列表应包含与 consumer_account_locators 中列出的数量相同、顺序相同的条目。

  • enable_diffineral_privacy_tasks(布尔,可选) – 如果为 TRUE,则在此 Clean Room 中列出的用户提出的所有查询中强制执行差分隐私。这是一种使用默认值为列出的用户启用差分隐私的简单方法。要指定高级设置,请改为提供 privacy_settings 实参。差分隐私任务必须在此 Clean Room 中运行,才能启用差分隐私。默认值为 FALSE。

  • privacy_settings(字符串,可选) – 如果存在,则在 consumer_account_names 中的任何用户使用自定义模板时,将隐私设置应用于自定义模板。这是对象的字符串版本,其中包含一个 NULL 键和一个用于指定各种隐私设置的值。不要同时指定 enable_differential_privacy_tasksprivacy_settings。差分隐私任务必须在此 Clean Room 中运行,才能启用差分隐私。请参阅此对象的可用字段。

返回: 成功消息。请注意,该过程不会验证用户定位器或账户名称,因此成功仅表示提交的定位器已添加到此 Clean Room 的数据库。

示例:

-- Add consumer without differential privacy.
CALL samooha_by_snowflake_local_db.provider.add_consumers($cleanroom_name,
  'LOCATOR1,LOCATOR2',
  'ORG1.NAME1,ORG2.NAME2');

-- Add consumer and turn on differential privacy for all their queries.
CALL samooha_by_snowflake_local_db.provider.add_consumers($cleanroom_name,
  'LOCATOR1',
  'ORGNAME.ACCOUNTNAME',
  '{
      "null": {
          "threshold_value": 5000,
          "differential": 1,
          "privacy_budget": 10,
          "epsilon": 0.1,
          "noise_mechanism": "Laplace"
      }}');
Copy

provider.remove_consumers

描述: 撤销指定 Clean Room 的账户访问权限。这种方法会阻止所提供账户中所有用户的访问。

您可以通过调用 provider.view_consumers 来查看当前的使用者列表。

实参:

  • cleanroom_name(字符串) – Clean Room 的 ID(不容易记住的名称)。

  • cleanroom_account_locators(字符串) – 以逗号分隔的用户账户定位器列表。账户中的所有用户都将无法访问 Clean Room。

返回: (字符串) – 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.remove_consumers($cleanroom_name, 'locator1,locator2,locator3');
Copy

provider.set_cleanroom_ui_accessibility

描述: 向所有登录此提供商账户的用户显示或隐藏 Clean Room UI 中的 Clean Room。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • visibility_status(字符串) – 以下区分大小写的值之一:

    • HIDDEN – 对当前提供商账户中的所有用户隐藏 Clean Room UI 中的 Clean Room。Clean Room 仍可通过 API 调用访问。

    • EDITABLE – 让 Clean Room 在 Clean Room UI 中可见。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.set_cleanroom_ui_accessibility($cleanroom_name, 'HIDDEN');
Copy

跨云协作

允许与其他云区域的使用者共享 Clean Room。了解详情。

library.enable_laf_on_account

描述: 在当前账户上启用 Cross-Cloud Auto-Fulfillment。运行此过程需要 ACCOUNTADMIN 角色。

重要

您必须先通过调用 SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT 为账户启用 Cross-Cloud Auto-Fulfillment。详细了解自动履行管理自动履行权限

实参:

返回: (字符串) 成功消息。

示例:

USE ROLE ACCOUNTADMIN;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.library.enable_laf_on_account();
Copy

library.disable_laf_on_account

描述: 在当前账户上禁用 Cross-Cloud Auto-Fulfillment。运行此过程需要 ACCOUNTADMIN 角色。

重要

您必须先调用 SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT,然后才能对账户禁用 Cross-Cloud Auto-Fulfillment。了解有关自动执行管理自动执行权限 的更多信息。

实参:

返回: (字符串) 成功消息。

示例:

USE ROLE ACCOUNTADMIN;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.library.disable_laf_on_account();
Copy

library.is_laf_enabled_on_account

描述: 返回是否为此账户启用 Cross-Cloud Auto-Fulfillment。

返回: 如果为此账户启用了 Cross-Cloud Auto-Fulfillment,则为 TRUE,否则为 FALSE。

示例:

CALL samooha_by_snowflake_local_db.library.is_laf_enabled_on_account();
Copy

provider.request_laf_cleanroom_requests

描述: 在提供商端为给定使用者设置跨云请求共享。账户管理员必须首先 启用 Cross-Cloud Auto-Fulfillment,并且使用者必须调用了 consumer.setup_cleanroom_request_share_for_laf

对于使用者定义的模板(其中提供商和使用者位于不同的云区域),此过程是必需的。

您可以反复调用此过程来检查请求的状态。当状态达到 FULFILLED 时,可以调用 provider.mount_laf_cleanroom_requests_share。状态可能需要 10 分钟才能达到 FULFILLED。

实参:

  • cleanroom_name(字符串) – 用于启用跨云请求共享的 Clean Room 的名称。

  • consumer_locator(字符串) – 要为其启用跨云请求共享的使用者的账户定位器。

返回: (字符串) 请求的状态消息:CREATED、PENDING、FULFILLED、FAILURE。“FAILURE, listing not found”表示使用者尚未安装 Clean Room(或已将其卸载)。

示例:

CALL samooha_by_snowflake_local_db.provider.request_laf_cleanroom_requests(
  $cleanroom_name, $consumer_locator);
Copy

provider.mount_laf_cleanroom_requests_share

描述: 使给定的 Clean Room 和使用者账户可以访问跨云请求。provider.request_laf_cleanroom_requests 必须返回 FULFILLED 的状态,然后才能调用此过程。

对于使用者定义的模板(其中提供商和使用者位于不同的云区域),此过程是必需的。

实参:

  • cleanroom_name(字符串) – 共享的 Clean Room。

  • consumer_locator(字符串) – 将在此 Clean Room 提出跨云请求的使用者的 Snowflake 账户定位器。

返回: (字符串) 成功消息。

示例:

CALL samooha_by_snowflake_local_db.provider.mount_laf_cleanroom_requests_share(
  $cleanroom_name, $consumer_locator);
Copy

在 Clean Room 中使用 Python

provider.load_python_into_cleanroom

描述: 将自定义 Python 代码加载到 Clean Room。使用此过程加载到 Clean Room 的代码都对使用者不可见。Jinja 模板可以调用上传的代码。尽管您的代码可能包含多个函数定义,但一个模板只能调用一个函数。

了解如何在 Clean Room 中上传和使用 Python 代码。

此过程会递增 Clean Room 的补丁号并触发安全扫描。您必须等待扫描状态变为 APPROVED,然后才能与协作者共享最新版本。

此过程重载,并且具有两个签名,该签名与第五个实参的数据类型不同,它们决定了是内联上传代码还是从暂存区上的文件加载代码:

load_python_into_cleanroom 具有以下用于内联代码上传的签名。将代码字符串传递到 code 实参中。

(cleanroom_name String, function_name String, arguments Array, packages Array, rettype String, handler String, code String)
Copy

实参:

  • cleanroom_name(字符串) – 应在其中加载脚本的 Clean Room 的名称。

  • function_name(字符串) – 模板用来调用 handler 指定的函数的名称。模板必须使用 cleanroom 命名空间来限定函数名称。例如:cleanroom.my_func(val1, val2)

  • arguments(字符串对数组) – 函数 function_name 所需的实参数组。每个元素都是以空格分隔的“name data type”对,用于指定实参名称及其 Snowflake SQL 数据类型。例如:['size INT', 'start_date  DATE']

  • packages(字符串数组) – 代码使用的任何 Python 包名称列表。Clean rooms 原生支持 [此列表中] (https://repo.anaconda.com/pkgs/snowflake/) 或 [Snowpark API] (https://docs.snowflake.com/developer-guide/snowpark/reference/python/latest/snowpark/index) 的所有包。如果您需要未在此处列出的包,则必须使用 Clean Room 中的 Snowpark Container Services。

  • ret_type(字符串) – 函数 handler 返回的值的 SQL 数据类型。(请参阅部分等效 Python 和 SQL 类型。可以接受 Snowflake SQL 类型的同义词,例如 VARCHAR 的 STRING。)对于 UDF,返回类型是单一 SQL 类型。对于 UDTF,返回类型是 TABLE 函数和 <column name> <SQL column type> 对。例如:

    TABLE (item_name STRING, total FLOAT)

  • handler(字符串) – 模板调用 function_name 时代码中调用的函数。对于 UDF,这应该是函数本名;对于 UDTF,这应该是实施 UDTF 的类的名称。

  • code(字符串) – 您的 Python 代码作为字符串。这应该是 Python UDF

返回: (字符串) 成功或失败消息。

示例:

-- Inline UDF

CALL samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
    $cleanroom_name, 
    'assign_group',                      -- Name of the UDF.
    ['data STRING', 'index INTEGER'],    -- Arguments of the UDF, along with their type.
    ['pandas', 'numpy'],                 -- Packages UDF will use.
    'INTEGER',                           -- Return type of UDF.
    'main',                              -- Handler.
    $$
import pandas as pd
import numpy as np

def main(data, index):
    df = pd.DataFrame(data)  # you can do something with df but this is just an example
    return np.random.randint(1, 100)
    $$
);
Copy
-- Upload from stage

CALL samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
    $cleanroom_name,
    'myfunc',                            -- Name of the UDF.
    ['data STRING', 'index INTEGER'],    -- Arguments of the UDF.
    ['numpy', 'pandas'],                 -- Packages UDF will use.
    ['/assign_group.py']                 -- Python file to import from a stage.
    'INTEGER',                           -- Return type of UDF.
    'assign_group.main'                  -- Handler, scoped to file name.
);
Copy

provider.get_stage_for_python_files

描述: 如果您计划使用上传到暂存区的代码文件而不是内联代码定义来定义 Clean Room 中的自定义 Python 代码,则返回应将 Python 文件上传到的暂存区路径。在通过调用 provider.load_python_into_cleanroom 上传文件之前,该暂存区不存在,无法检查。

了解如何在 Clean Room 中上传和使用 Python 代码。

实参:

  • cleanroom_name(字符串) – 要向其中上传文件的 Clean Room 的名称。

返回: (字符串) 您应该上传代码文件的路径。将其用于 provider.load_python_into_cleanroom 中的 imports 实参。

示例:

CALL samooha_by_snowflake_local_db.provider.get_stage_for_python_files($cleanroom_name);
Copy

provider.view_cleanroom_scan_status

描述: 报告 DISTRIBUTION 设置为 EXTERNAL 的 Clean Room 的威胁扫描状态。扫描需要标记为“APPROVED”,然后才能设置或更改默认发布指令。扫描状态只需要用 EXTERNAL Clean Room 检查。

实参:

  • cleanroom_name(字符串) – 要检查状态的 Clean Room 的名称。

返回: (字符串) 扫描状态。可能是以下值:

  • NOT_REVIEWED – 扫描正在进行。

  • APPROVED – 扫描通过。

  • REJECTED – 扫描失败;无法发布新的 Clean Room 版本。尝试在代码中找到问题并重试上一次操作。

  • MANUAL_REVIEW – 扫描需要 Snowflake 手动审查。这可能需要几天时间,因此请定期查看。

示例:

CALL samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name);
Copy

Clean Room 元数据 getter 命令

使用以下命令可显示 Clean Room 的相关属性。

library.view_external_activation_history

描述: 查看当前账户的激活请求历史记录。

实参:

返回: 包含激活请求的详细信息和状态的表。

示例

CALL samooha_by_snowflake_local_db.library.view_external_activation_history();
Copy

provider.mount_request_logs_for_all_consumers

描述: 允许提供商访问 Clean Room 的使用者向提供商返回的信息。如 API 参考中所述,必须在各种情况下调用此过程,才能开始获取或共享使用者信息。

实参:

  • cleanroom_name(字符串) – 要挂载请求日志的 Clean Room 的名称。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.mount_request_logs_for_all_consumers($cleanroom_name);
Copy

provider.view_request_logs

描述: 查看此 Clean Room 的使用者发送的请求日志。首次调用前,必须调用 mount_request_logs_for_all_consumers

实参:

  • cleanroom_name(字符串) – 要查看请求日志的 Clean Room 的名称。

返回: 针对 Clean Room 运行的查询的一系列日志(表)

示例:

CALL samooha_by_snowflake_local_db.provider.view_request_logs($cleanroom_name);
Copy

差分隐私

这些命令控制用户级别或提供商账户级别的差分隐私。详细了解差分隐私。

provider.set_privacy_settings

描述: 设置(或重置)指定使用者运行自定义模板时强制执行的隐私设置。这会替换该使用者的所有现有设置。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • consumer_account_locator(字符串) – 以逗号分隔的列表形式显示一个或多个使用者的账户定位器。

  • privacy_settings(对象) – 为一个或多个模板指定差异隐私设置的 JSON 对象。设置适用于指定使用者运行的所有模板。请参阅此对象的可用字段。

返回: 成功消息。

示例:

-- Enforce differential privacy on queries by this consumer
-- with the settings provided.
CALL samooha_by_snowflake_local_db.provider.set_privacy_settings(
  $cleanroom_name, 
  $consumer_locator,
  { 'differential': 1,
    'epsilon': 0.1,
    'privacy_budget': 3 });
Copy

provider.is_dp_enabled_on_account

描述: 描述是否为此账户启用了差分隐私。

实参:

返回: 如果对此账户启用了差分隐私,则为 TRUE,否则为 FALSE。

示例:

CALL samooha_by_snowflake_local_db.provider.is_dp_enabled_on_account();
Copy

provider.suspend_account_dp_task

描述: 禁用监控和强制执行差分隐私预算的任务。此函数用于控制 账户中与差分隐私相关的成本。如果禁用差分隐私任务,则指定差分隐私的用户、模板或 Clean Room 执行的查询中仍会增加噪音,但不会强制执行预算限制,也不会因差分隐私而产生费用。了解有关管理差分隐私的更多信息。

实参:

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.suspend_account_dp_task();
Copy

provider.resume_account_dp_task

描述: 恢复当前账户中的差分隐私任务监听器,并将强制执行差分隐私预算。之前设置的任何差分隐私值(如敏感度或关联用户)都将保留。

实参:

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.resume_account_dp_task();
Copy

Snowpark Container Services 命令

这些过程使您能够 在 Clean Room 内使用 Snowpark Container Services

provider.load_service_into_cleanroom

描述: 在 Clean Room 中创建或更新容器服务。调用此过程会更新 Clean Room 补丁号,因此必须在调用此过程之后调用 provider.set_default_release_directive。每次创建或更新服务时必须调用此过程。然后,客户端必须调用 consumer.start_or_update_service 才能查看更新。

了解如何在 Clean Room 中使用 Snowpark Container Services。

实参:

  • cleanroom_name(字符串) – Clean Room 的名称。

  • service_spec(字符串) – 基于 spec 元素的服务的 YAML 规范。

  • service_config(字符串) – 服务的 YAML 格式配置。支持以下属性:

    • default_service_options – 服务级别默认值的可选数组。使用者在创建服务时可以替换这些值。支持以下子属性:

      • min_instances (整数,可选)

      • max_instances (整数,可选)

      • allow_monitoring (布尔,可选) – 如果为 TRUE,则允许使用者查看服务日志。默认值为 FALSE。

    • functions – 服务公开的函数数组。每个函数定义都映射到 SPCS 服务函数定义。请参阅该文档以了解每个元素的详细信息。支持以下子属性:

      • name

      • args

      • returns

      • endpoint

      • path

      • max_batch_rows可选

      • context_headers可选

返回:字符串)如果成功,则返回成功消息。如果不成功,则会引发错误。

示例:

CALL samooha_by_snowflake_local_db.provider.load_service_into_cleanroom(
    $cleanroom_name,
    $$
    spec:
      containers:
      - name: lal
        image: /dcr_spcs/repos/lal_example/lal_service_image:latest
        env:
          SERVER_PORT: 8000
        readinessProbe:
          port: 8000
          path: /healthcheck
      endpoints:
      - name: lalendpoint
        port: 8000
        public: false
    $$,
    $$
    default_service_options:
      min_instances: 1
      max_instances: 1
      allow_monitoring: true
    
    functions:
      - name: train
        args: PROVIDER_TABLE VARCHAR, PROVIDER_JOIN_COL VARCHAR, CONSUMER_TABLE VARCHAR, CONSUMER_JOIN_COL VARCHAR, DIMENSIONS ARRAY, FILTER VARCHAR
        returns: VARCHAR
        endpoint: lalendpoint
        path: /train
      - name: score
        args: PROVIDER_TABLE VARCHAR, PROVIDER_JOIN_COL VARCHAR, CONSUMER_TABLE VARCHAR, CONSUMER_JOIN_COL VARCHAR, DIMENSIONS ARRAY
        returns: VARCHAR
        endpoint: lalendpoint
        path: /score
      - name: score_batch
        args: ID VARCHAR, FEATURES ARRAY
        returns: VARIANT
        max_batch_rows: 1000
        endpoint: lalendpoint
        path: /scorebatch
$$);
Copy

环境管理

使用以下命令一般有助于充分利用 Clean Room 功能和支持流程。

provider.manage_datastats_task_on_account

描述: 启用或禁用计算 Clean Room 统计数据的后台任务。该任务默认运行,但您可以将其禁用以降低成本。要管理任务,所有协作者都必须使用相同的值调用此过程的相应 提供商使用者 版本。

实参:

  • 启用(布尔) – TRUE 为启用任务,FALSE 为禁用任务。

返回: 成功消息。

示例:

-- Disable the task in this account.
CALL samooha_by_snowflake_local_db.provider.manage_datastats_task_on_account(FALSE);
Copy

library.enable_local_db_auto_upgrades

描述: 启用在发布新过程或功能时自动升级 Snowflake Data Clean Room 环境的任务(该任务是 samooha_by_snowflake_local_db.admin.expected_version_task。)调用此过程来自动升级,而不是对每个新版本调用 library.apply_patch

虽然禁用该任务可能会降低成本,但我们建议让它继续运行,以确保您的系统上有最新版本的 Clean Room 环境。

实参:

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.enable_local_db_auto_upgrades();
Copy

library.disable_local_db_auto_upgrades

描述: 禁用在新版本发布时自动升级 Snowflake Data Clean Room 环境的任务。如果您禁用自动升级,则必须对每个 新版本 调用 library.apply_patch

实参:

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.disable_local_db_auto_upgrades();
Copy

library.apply_patch

描述: 更新 Clean Room 环境,在环境中启用新功能和修复。在发布新版本的 Clean Room 环境时调用此任务。(这通常每周一次;请参阅 近期 Snowsight 和功能版本 中的 Clean Room 条目。)此过程会更新 SAMOOHA_BY_SNOWFLAKE_LOCAL_DB

您可以通过调用 library.enable_local_db_auto_upgrades 来自动更新补丁。我们建议启用自动更新。

实参:

返回: (字符串) 成功消息。

示例:

CALL samooha_by_snowflake_local_db.library.apply_patch();
Copy

provider.patch_cleanroom

描述: 将指定的 Clean Room 更新到最新版本,从而为该 Clean Room 启用新功能和修复。通常,只有在 Snowflake 支持部门要求您调用此任务时,您才会进行调用。

在使用者调用 library.patch_cleanroom 之前,提供商应先调用 library.patch_cleanroom。否则,将没有可应用的补丁。

实参:

  • cleanroom_name(字符串) – 要应用补丁的 Clean Room 的名称。

返回: (字符串) 成功消息。

示例:

CALL samooha_by_snowflake_local_db.provider.patch_cleanroom($cleanroom_name);
Copy

dcr_health.dcr_tasks_health_check

描述: 显示有关正在运行或最近停止的 Clean Room 任务的信息。

实参:

返回: (表) 有关 Clean Room 任务的信息,包括计划、仓库名称和仓库规模。

示例:

CALL samooha_by_snowflake_local_db.dcr_health.dcr_tasks_health_check();
Copy

已弃用的过程

下列过程已弃用,在此处列出仅为保障列表完整性。如果指明了替换过程,请使用较新的过程。

provider.enable_laf_for_cleanroom(已弃用

此函数现已弃用,其功能将由 provider.create_or_update_cleanroom_listing 处理。

描述: 启用 Cross-Cloud Auto-Fulfillment,这允许您在协作者的 Snowflake 账户与提供商的账户位于不同区域时与协作者共享 Clean Room。Cross-Cloud Auto-Fulfillment 也称为 Listing Auto-Fulfillment (LAF)。

默认情况下,对于新 Clean Room,Cross-Cloud Auto-Fulfillment 是关闭的,即使该环境已启用。

重要

具有 ACCOUNTADMIN 角色的 Snowflake 管理员必须在您的 Snowflake 账户中启用 Cross-Cloud Auto-Fulfillment,然后 您才能运行此过程。了解 Cross-Cloud Auto-Fulfillment

与其他区域的使用者协作会产生额外费用。有关这些费用的更多信息,请参阅 Cross-Cloud Auto-Fulfillment 费用

实参:

*cleanroom_name(字符串) – 应跨区域共享的 Clean Room 的名称。管理员必须为账户启用 Cross-Cloud Auto-Fulfillment,然后才能共享单个 Clean Room。

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.enable_laf_for_cleanroom($cleanroom_name);
Copy

provider.view_ui_registration_request_log -- DEPRECATED

注意

此命令现已弃用。 您不再需要手动注册 Clean Room 模板以在 Clean Room UI 中使用。

描述: 查看从账户提出的将 Clean Room 注册到 Clean Room UI 的请求的列表。每个请求都有关联的 ID,可与 view_ui_registration_log 过程结合使用,以查看请求的状态。请求共享到后端,在此处处理请求,并将 Clean Room 添加到 Clean Room。

实参:

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.view_ui_registration_request_log();
Copy

library.register_table_or_view – 已弃用

注意

此命令现已弃用。 改用 library.register_objects

描述: 注册所有类型的表和视图。

实参: object_names(数组)、is_view(布尔)、is_iceberg(布尔)、is_external(布尔)、is_under_managed_access_schema(布尔)

返回: (字符串) 成功或失败消息。

示例

要注册表:

CALL samooha_by_snowflake_local_db.library.register_table_or_view(
    ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],
    false,
    false,
    false,
    false);
Copy

要注册 Iceberg 表:

CALL samooha_by_snowflake_local_db.library.register_table_or_view(
        ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], 
        false, 
        true,
        false,
        false);
Copy

library.register_table – 已弃用

注意

此命令现已弃用。 改用 library.register_objects

描述:register_db 类似,但在表级运行。将此表的 SELECT 权限授予 SAMOOHA_APP_ROLE 角色,使用户能够将表链接到 Clean Room。

如果要在托管访问架构(即使用 WITH MANAGED ACCESS 参数创建的架构)中注册表,请改用 library.register_managed_access_table

实参: table_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.register_table(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.register_managed_access_table – 已弃用

注意

此命令现已弃用。 改用 library.register_objects

描述:类似于 register_table,但在使用 WITH MANAGED ACCESS 参数创建的架构中注册表。可以传入表示完全限定表名称的数组或字符串,并授予 SAMOOHA_APP_ROLE 角色选择权限,使用户能够将表链接到 clean room 中。

实参: table_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.register_managed_access_table(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.register_view – 已弃用

注意

此命令现已弃用。 改用 library.register_objects

描述:register_db 类似,但在视图级运行。可以传入表示完全限定视图名称的数组或字符串,并授予 SAMOOHA_APP_ROLE 角色选择权限,使用户能够将视图链接到 clean room 中。

如果要在托管访问架构(即使用 WITH MANAGED ACCESS 参数创建的架构)中注册视图,请改用 library.register_managed_access_view

实参: view_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.register_view(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.register_managed_access_view – 已弃用

注意

此命令现已弃用。 改用 library.register_objects

描述: 类似于 register_view,但在使用 WITH MANAGED ACCESS 参数创建的架构中注册视图。可以传入表示完全限定视图名称的数组或字符串,并授予 SAMOOHA_APP_ROLE 角色选择权限,使用户能够将视图链接到 clean room 中。

实参: view_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.register_managed_access_view(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.unregister_table_or_view – 已弃用

注意

此命令现已弃用。 改用 library.unregister_objects

描述: 取消注册所有类型的表和视图。

实参: object_names(数组)、is_view(布尔)、is_iceberg(布尔)、is_external(布尔)、is_under_managed_access_schema(布尔)

返回: (字符串) 成功或失败消息。

示例

要取消注册表:

CALL samooha_by_snowflake_local_db.library.unregister_table_or_view(
    ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],
    false,
    false,
    false,
    false);
Copy

library.unregister_table – 已弃用

注意

此命令现已弃用。 改用 library.unregister_objects

描述:unregister_db 类似,但在表级运行。可以传入表示完全限定表名称的数组或字符串来取消注册表。用户无法将取消注册的表链接到 Clean Room 中。

如果要在托管访问架构(即使用 WITH MANAGED ACCESS 参数创建的架构)中取消注册表,请改用 library.unregister_managed_access_table

实参: table_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.unregister_table(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.unregister_managed_access_table – 已弃用

注意

此命令现已弃用。 改用 library.unregister_objects

描述:类似于 unregister_table,但在托管访问架构(即使用 WITH MANAGED ACCESS 创建的架构)中取消注册表。

实参: table_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.unregister_managed_access_table(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.unregister_view – 已弃用

注意

此命令现已弃用。 改用 library.unregister_objects

描述:unregister_db 类似,但在视图级运行。可以传入表示完全限定视图名称的数组或字符串来取消注册视图。用户无法将取消注册的视图链接到 Clean Room 中。

如果要在托管访问架构(即使用 WITH MANAGED ACCESS 参数创建的架构)中注册视图,请改用 library.unregister_managed_access_view

实参: view_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.unregister_view(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

library.unregister_managed_access_view – 已弃用

注意

此命令现已弃用。 改用 library.unregister_objects

描述:类似于 unregister_view,但在托管访问架构(即使用 WITH MANAGED ACCESS 创建的架构)中取消注册视图。

实参: view_name(数组)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.library.unregister_managed_access_view(['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

provider.create_cleanroom_listing – 已弃用

注意

此命令现已弃用。 改用 provider.create_or_update_cleanroom_listing

描述: 配置 Clean Room 后,在 Snowflake Marketplace 上创建该 Clean Room 的专用列表,并与指定的协作者共享。

您可以使用账户 URL 的 orgname.account_name 格式来识别协作者。使用者可以按照 查找账户的组织和账户名称 (https://user-guide/admin-account-identifier#finding-the-organization-and-account-name-for-an-account) 中的说明查找此字符串。

备注

要使用此程序,您需要设置发布指令。有关更多信息,请参阅 provider.set_default_release_directive

实参: cleanroom_name(字符串)、consumer_account_name(字符串)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.create_cleanroom_listing($cleanroom_name, <consumerorg.consumeracct>);
Copy

provider.register_cleanroom_in_ui -- DEPRECATED

注意

此命令现已弃用。 您不再需要手动注册 Clean Room 模板以在 Clean Room UI 中使用。

描述: 注册 Clean Room,供使用者在 Clean Room UI 中使用。Clean Room 由提供商使用开发者 APIs 创建和配置。然后,此命令将 Clean Room 注册到 Clean Room UI 中,以便使用者安装、添加表并运行您添加的任何自定义分析,而无需使用开发者 APIs。使用者完全通过 Clean Room UI 的用户界面使用 Clean Room。

您可以多次调用该 API,将多个自定义模板添加到 Clean Room UI 中。

实参: cleanroom_name(字符串)、template name(字符串)、consumer_account_locator(字符串)、user_email(字符串)

返回: (字符串) 成功或失败消息。

示例:

CALL samooha_by_snowflake_local_db.provider.register_cleanroom_in_ui($cleanroom_name, 'prod_custom_template', <CONSUMER ACCOUNT LOCATOR>, <USER_EMAIL>)
Copy
语言: 中文