Snowflake Data Clean Rooms 开发者指南¶
本页为想要以编程方式在 Snowflake 中创建或管理 Clean Room 或模板的用户提供了一些指南。
Snowflake 公开存储过程,使您能够开发应用程序,从而创建或控制 Clean Room。这些存储过程可在任何可以访问与您的 Clean Room 环境关联的 Snowflake 账户的界面中运行,包括 Snowsight 笔记本或工作表以及 Snowflake CLI。可以用 Snowflake 界面支持的 SQL 或任何语言来调用这些过程。
设置您的环境¶
开发工具¶
以下是 Clean Room 的主要开发者工具:
编码环境: 任何可以在您的 Snowflake 账户中运行存储过程的编码环境都可以运行。大多数开发者使用 Snowsight 中的工作表(基于浏览器的工具)或 Snowflake CLI。
** Clean Room UI:** 使用 Clean Room UI 配置、管理或创建 Clean Room。大多数 Clean Room 分析师使用的是 UI 而不是代码,因此在 UI 中查看和测试 Clean Room 的体验可能会很有用。此外,还有一些 功能仅可在 Clean Room UI 中使用。
Snowsight 可用于浏览数据库和其他对象以及搜索对象。
编码设置¶
所需角色和仓库¶
Clean Room API 需要 SAMOOHA_APP_ROLE 角色才能完全访问 API。请您的 Clean Room 管理员 授予您完整的 API 访问权限。
Clean Room 还支持 创建可以访问 API 过程子集的角色。
您必须在 SAMOOHA_APP_ROLE 可以使用的仓库中使用 Clean Room API。Clean Room 为仓库 APP_WH 提供了 Clean Room API 访问权限。
-- Set up environment.
USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
-- Call your clean rooms API functions.
...
如果您使用任何其他仓库,请务必授予该仓库的 SAMOOHA_APP_ROLE 使用权:
GRANT USAGE ON WAREHOUSE <your warehouse> TO SAMOOHA_APP_ROLE;`
关于 Clean Room API¶
Snowflake Data Clean Rooms 公开了一组允许提供商创建、配置和共享 Clean Room 的存储过程。支持 Snowflake 过程的任何命令行环境都可以访问这些过程,包括笔记本、工作簿和 Snowflake CLI。您可以使用任何支持存储过程的语言使用 Clean Room API。这里的文档显示了 SQL 用法,但您也可以使用 Python 或 任何其他支持的语言。
过程存在于以下架构中:
samooha_by_snowflake_local_db.provider
– 特定于提供商的过程。这些过程只能在当前账户中创建的 Clean Room 上调用。samooha_by_snowflake_local_db.consumer
– 特定于使用者的过程。这些过程只能在当前账户受邀作为使用者的 Clean Room 上调用。samooha_by_snowflake_local_db.library
– Clean Room 创建者(提供商)或 Clean Room 协作者(使用者)调用的一般过程。(这些都记录在提供商和使用者参考页面中。)
有些过程既有提供者版本,也有使用者版本。结果符合架构:例如,provider.view_cleanrooms
列出了您作为提供商的当前账户中的所有 Clean Room,而 consumer.view_cleanrooms
列出了您作为使用者的当前账户中的所有 Clean Room。
关于 API 过程中的 Clean Room 名称¶
许多 Clean Room API 过程都需要 cleanroom_name
实参。
如果 Clean Room 是 使用 API 创建的,则使用 Clean Room 名称。
如果 Clean Room 是 使用 Clean Room ID 创建的,则使用 Clean Room UI。
您可以通过调用 describe_cleanroom
查看 Clean Room 名称和 ID。
设置账户、用户和角色¶
从技术上讲,您无需使用 Clean Room UI 来开发 Clean Room:大多数 Clean Room 功能都可使用存储过程来实现。但是,有一些功能 仅在 UI 中可用,有些功能在 UI 中执行速度更快。而且,由于许多用户专门使用 UI,因此查看您的 Clean Room 在 UI 中的行为非常重要,尤其是在您为创建的 Clean Room 创建用户配置 Web 表单时。因此,您应该要求 Clean Room 管理员在相应的 Clean Room 账户中将您添加为 Clean Room 管理员或更高级别的角色。
我们建议至少使用单独的提供商和使用者 Snowflake 账户来测试 Clean Room 的两端。根据您的用例,您可能还需要在不同的 Web 托管区域设置一个额外的 Snowflake 账户,以测试 :doc:`跨云行为 </user-guide/cleanrooms/enabling-laf> `。
对测试的 Snowflake 账户进行有意义的命名,以表明其典型用法:例如,“使用者账户”、“提供商账户”和“跨云账户”。当您有多个测试账户并且需要知道要登录哪个账户时,这会有所帮助。
准则和建议¶
确认您在 Clean Room UI 和代码中使用相同的账户¶
您经常需要为同一 Snowflake 账户打开编码环境和 Clean Room UI(例如,在代码中创建 Clean Room 时),然后检查其在 Clean Room UI 中的外观。请务必确认您在每个 Clean Room 中使用相同的 Snowflake 账户。
Snowsight 没有为同一个账户打开 Clean Room UI 的快捷方式,反之亦然,因此您必须确保 Clean Room UI 和 Snowsight 都在同一个账户中打开。
Clean Room 名称与 Clean Room ID 的对比¶
使用 API 时,对于需要 cleanroom_name
实参的过程,按如下方式确定是使用 Clean Room 名称还是 Clean Room ID:
如果 Clean Room 是使用 API 创建的,则使用 Clean Room 名称。
如果 Clean Room 是在 Web 应用程序中创建的,则使用 Clean Room ID。您可以通过调用
provider.view_cleanrooms
或provider.describe_cleanroom
来查看 Clean Room 名称和 ID。
无论何时进行更改,都要更新您的 Clean Room¶
要更改任何 Clean Room 设置,包括模板、权限或策略,请调用 provider.create_or_update_cleanroom_listing
以启用更改。在某些情况下,更改可能在调用此过程之前可见,但更改要等到您调用 provider.create_or_update_cleanroom_listing
之后才能正常生效。
在代码或 UI 中创建的 Clean Room 之间的互操作性¶
在 API 中创建 Clean Room 时,Clean Room UI 中的某些功能不可修改。例如,您不能在 UI 创建的 Clean Room 的代码中添加其他模板,甚至是库存 Snowflake 模板。您也无法更改差分隐私设置。
Clean Room 对象的描述¶
Snowflake Data Clean Room 在安装时会创建许多本地数据库。以下是一些更有用的对象:
SAMOOHA_CLEANROOM_cleanroom_id
包含该账户中创建的每个 Clean Room 的特定信息。包括以下内容:
Admin:加密密钥、隐私预算、请求日志、提供商分析请求等。
Shared_schema:联接策略、LAF 状态、链接表、版本。
Templates:此 Clean Room 中的激活模板、自定义模板和模板链列表。
SAMOOHA_CLEANROOM_REQUESTS_cleanroom_id
包含请求历史记录,例如多提供商请求、模板请求、查询请求。
- SAMOOHA_BY_SNOWFLAKE_LOCAL_DB:
Provider.procedures:所有提供商 API 过程的定义
Consumer.procedures:所有使用者 API 过程的定义。
Library.procedures:提供商和使用者的所有 API 过程定义。
Public.consumer_activation_summary:使用者激活结果。
Public.provider_activation_summary:提供商激活结果。
- SAMOOHA_BY_SNOWFLAKE.TEMPLATES.TEMPLATES:
保存此账户中可用于 Clean Room 的所有库存 Snowflake 模板的清单和定义。
(使用者)无法在联接的 Clean Room 上设置联接策略或执行其他基本操作¶
确认您已使用正确角色安装 Clean Room (SAMOOHA_APP_ROLE)。如果您在安装 Clean Room 时没有使用 SAMOOHA_APP_ROLE,则会遇到很多问题,常见的是权限错误。如果是这种情况,即使是 consumer.uninstall_cleanroom
也会失败,您必须采取额外步骤卸载 Clean Room,然后使用正确的角色重新安装。
-- Who owns the clean room?
SHOW SHARES LIKE 'SAMOOHA_CLEANROOM_REQUESTS_<cleanroom_name>';
-- If the owner role is not SAMOOHA_APP_ROLE, you must drop the share, then
-- uninstall the clean room.
DROP SHARE SAMOOHA_CLEANROOM_REQUESTS_<cleanroom_name>;
CALL samooha_by_snowflake_local_db.consumer.uninstall_cleanroom($cleanroom_name);
USE ROLE samooha_app_role;
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<provider_locator>');
常见意外结果¶
请务必调用您过程的正确 provider
版本或 consumer
版本。许多过程都有提供商和使用者版本。
找不到您创建的 Clean Room¶
如果您在一个账户中创建了 Clean Room,但在协作者账户中看不到它,可能的原因有以下几个:
Clean Room 是在不同的云托管区域创建的,并且您尚未启用 Cross-Cloud Auto-Fulfillment。
您没有通过调用
provider.create_or_update_cleanroom_listing
发布您的 Clean Room。您是在调用
consumer.view_cleanrooms()
而不是 ``provider.view_cleanrooms()``(或相反)。您没有共享 Clean Room,使用错误账户共享 Clean Room,或者您在 Snowsight/Clean Room UI/CLI 中打开了错误的协作者账户。确认您希望看到 Clean Room 的账户是您共享 Clean Room 的账户,并且您已登录该共享账户。
从发布 Clean Room 到协作者可以看到它之间会有很小的延迟。
未知函数¶
如果您调用一个过程并得到这样的错误:.. code-block:: sqlexample
未知的用户定义函数 SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.CONSUMER.<procedure name>
您要么没有 SAMOOHA_APP_ROLE,要么输入了错误的函数名称。
这也可能意味着您已被授予有限访问权限的运行角色,并且您的角色不允许您调用相关函数。您可以尝试 consumer.grant_run_on_cleanrooms_to_role
运行允许的过程成之一来对此进行测试。如果该过程成功,则您可能使用的是受限的角色。如果失败,您可能没有权限在该账户中运行 Clean Room API。
要查看是否有 SAMOOHA_APP_ROLE,请运行以下命令:
SELECT IS_ROLE_IN_SESSION( 'SAMOOHA_APP_ROLE' );
如果您遇到以下错误:
Database <cleanroom name> does not exist or not authorized. in RUN_ANALYSIS_STRING
您被授予了一个临时运行角色,但该角色已被撤销。向 Clean Room 管理员索要新的运行角色或完整 SAMOOHA_APP_ROLE 访问权限。
查看您的查询历史记录¶
您可以查看在 UI 或代码中运行的查询的查询历史记录。这些历史记录需要单独存储和检查。
UI 查询历史记录¶
Clean Room UI 在 Analyses & Queries 页面中显示该账户的所有先前查询和结果的列表。这些结果仅适用于在 UI 中运行的查询。
API 查询历史记录¶
要查看使用 API 运行的查询的账户历史记录,请执行以下操作:
登录 Snowsight。
选择 Monitoring » Query History。
使用筛选器查找与分析关联的查询,然后复制查询 ID。
打开工作表并执行查询,该查询根据查询的查询 ID 检索结果。例如,如果查询 ID 是
ABC123
,则执行以下操作:SELECT * FROM TABLE(result_scan(ABC123));
如果在运行 API 分析和使用此查询获取结果之间仓库被暂停,则可能无法获取结果。
扩展示例¶
为了帮助您了解如何使用开发者 APIs 的各种功能,您可以参考 Clean Room 文档 Use cases 部分中的示例。