注册数据¶
本主题介绍如何注册数据,以便将其链接到 Snowflake Data Clean Room。
受支持对象¶
可以将不同类型的对象链接到无尘室中,具体取决于 Clean Room 是使用 Web 应用程序还是使用 Clean Room API 创建的:
- Web 应用程序 Clean Room:
使用 Snowflake Data Clean Rooms Web 应用程序创建的 Clean Room 可将以下对象链接到其数据集:
表
动态表
视图
物化视图
安全视图。安全视图的所有者必须是 SAMOOHA_APP_ROLE 角色。
- API Clean Room:
使用 Clean Room API 创建的 Clean Room 可以链接 Snowflake Native App Framework 支持的任何对象。
备注
外部表和 Iceberg 表 必须先启用后才能注册。
注册数据对象¶
用户必须首先在数据库、架构或对象级别 注册 数据,然后才能将数据链接到 Clean Room。注册数据会向 SAMOOHA_APP_ROLE 授予对象的 USAGE 和 SELECT 权限,Clean Room 环境使用这些权限访问数据。注册数据库或架构会注册该数据库或架构中的所有对象。
重要
注册数据库或模式时,在注册 之后 添加的对象不会注册。您必须单独注册新对象或使用 Web 应用程序导航到 Admin > Snowflake Admin > Database Registration 并选择 Resync。
您只能链接已在您的账户中注册的数据。也就是说,提供商只能链接在提供商账户中注册的数据,而使用者只能链接在消费者账户中注册的数据。根据数据所有者的设置(允许的模板、联接和列策略等),所有方都可以访问任一方链接到其账户的数据。
您可以在代码中或使用 Web 应用程序注册对象。使用 Web 应用程序更简单,但需要您具有 ACCOUNTADMIN 角色。使用 Clean Room API,任何对象所有者都可以进行注册,即使他们不是账户管理员。
注册对象将授予 SAMOOHA_APP_ROLE 角色对于该对象的访问权限,本机应用程序使用该角色访问对象。
按照以下步骤使用 Web 应用程序注册数据库、架构或对象:
以账户管理员身份 登录 Web 应用程序,随后采取以下步骤之一:
如果使用托管账户,请选择 Admin > My Account。
如果使用 Snowflake 账户,请选择 Admin > Snowflake Admin,并以具有 ACCOUNTADMIN 角色的用户身份登录 Snowflake。
选择 Admin > Snowflake Admin。
选择 Log in to Snowflake,并以具有 ACCOUNTADMIN 角色的用户进行身份验证。
要在账户中启用外部表或 Iceberg 表,请启用 External & Iceberg Tables 切换开关。
在 Access management for Snowflake objects 部分中,选择 Edit,然后选择数据库、架构或对象,以使其数据可供此账户中的用户链接。
选择 Save。
使用 Clean Room API 以编程方式注册数据库、架构和对象。请注意,您需要具备对象的 MANAGE GRANTS 权限,然后才能注册该对象。
外部表和 Iceberg 表的 注册方式不同于其他对象类型。
以下过程可用于注册或取消注册对象:
对象类型 |
注册 |
取消注册 |
---|---|---|
数据库 |
|
|
架构 |
|
|
托管访问架构 |
|
|
受支持的其他任何对象类型 |
|
|
示例:
CALL samooha_by_snowflake_local_db.library.register_schema(['MY_DB.MY_SCHEMA']);
启用外部表和 Apache Iceberg™ 表¶
要允许外部表和 Iceberg 表链接到 Clean Room,必须首先配置账户,以允许使用外部表和 Iceberg 表。启用外部表和 Iceberg 表后,即可像处理其他表一样注册、链接和使用这些表。
启用外部和 Iceberg 表的过程各不相同,具体取决于您是使用 Web 应用程序还是代码管理 Clean Room。
外部表和 Iceberg 表要求¶
提供商和使用者账户都必须启用外部表和 Iceberg 表,这样才能允许完全使用链接外部表或 Iceberg 表的 Clean Room。
在与托管账户共享 Clean Room 时,提供商必须始终启用外部表和 Iceberg 表。 这是因为托管账户始终使用外部表。
如果提供商和使用者分处不同的区域, 则只有使用者可以将外部表或 Iceberg 表链接到 Clean Room。
Web 应用程序在账户级别控制外部表和 Iceberg 表。
警告
如果使用者账户未启用此功能,使用者将被阻止加入任何链接到外部表或 Iceberg 表的 Clean Room,或被阻止编辑(但仍可运行)任何已联接的、链接到这两种表之一的 Clean Room。
提供商和使用者账户中的 DCR 管理员必须执行以下步骤:
以账户管理员身份 登录 Web 应用程序,随后采取以下步骤之一:
如果使用托管账户,请选择 Admin > My Account。
如果使用 Snowflake 账户,请选择 Admin > Snowflake Admin,并以具有 ACCOUNTADMIN 角色的用户身份登录 Snowflake。
启用 External & Iceberg Tables 切换开关。这将在使用 Web 应用程序和代码创建的 Clean Room 中启用该功能。
现在,可在管理员的 Access management for Snowflake objects 面板中选择外部表和 Iceberg 表,从而使其可用于 Clean Room,就像其他任何对象一样。
使用代码时,您必须在账户级别启用外部表 和 Iceberg 表,此外还 必须为链接到外部表或 Iceberg 表的每个 Clean Room 启用外部表和 Iceberg 表。如果您在 Web 应用程序中启用了外部表和 Iceberg 表,则不需要在代码中启用它们(无需执行此处列出的步骤)。
警告
如果只有一个账户为其账户或 Clean Room 启用了此功能,并链接到外部表或 Iceberg 表,则另一个账户将能够运行现有模板,但无法以任何方式修改 Clean Room,直至该账户和 Clean Room 都允许外部表和 Iceberg 表。
要使用代码为新 Clean Room 启用和使用外部表或 Iceberg 表,请按照如下方式操作:
具有 ACCOUNTADMIN 角色的用户首先在提供商和使用者账户中为整个 Clean Room 环境启用外部表和 Iceberg 表:
USE ROLE ACCOUNTADMIN; CALL samooha_by_snowflake_local_db.library.enable_external_tables_on_account();
备注
在 Web 应用程序中创建的现有 Clean Room 不受此方法的影响。要更新在 Web 应用程序中创建的现有 Clean Room,您必须在代码中单独启用它们(如后续步骤所示),或者使用 Web 应用程序启用 Clean Room,从而为所有现有 Clean Room 启用该功能。
一个 供应商 为其 Clean Room 启用了外部表和 Iceberg 表。请注意,这将触发安全扫描,如果扫描成功,将生成一个新的 Clean Room 版本,因此您需要更新默认发布指令。
USE ROLE SAMOOHA_APP_ROLE; CALL samooha_by_snowflake_local_db.provider.enable_external_tables_for_cleanroom( $cleanroom_name); -- Call until scan is complete. call samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name); -- When scan is successful, update with patch version mentioned in return value from enable_external_tables_for_cleanroom. call samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '<PATCH_VERSION>');
使用者 还必须允许在同一 Clean Room 中使用外部表和 Iceberg 表:
USE ROLE SAMOOHA_APP_ROLE; CALL samooha_by_snowflake_local_db.consumer.enable_external_tables_for_cleanroom( $cleanroom_name);
在为 Clean Room 启用外部表和 Iceberg 表之后,协作者可以注册并链接这些表,方式与任何其他表相同。