注册数据¶
本主题介绍如何注册数据,以便将其链接到 Snowflake Data Clean Room。
受支持对象¶
以下对象类型可以链接到 Clean Room:
表
动态表
视图
物化视图
安全视图。安全视图的所有者必须是 SAMOOHA_APP_ROLE 角色。
备注
†外部表和 Iceberg 表 必须先启用后 才能在 Clean Room 中使用。
注册数据对象¶
在用户将数据链接到 Snowflake Data Clean Room 之前,必须先 注册 数据。注册数据可将对象的 USAGE 和 SELECT 权限授予 SAMOOHA_APP_ROLE,由 Clean Room 环境用于访问数据。如果您注册数据库或架构,则所有子对象也会被注册。您必须拥有对象的 MANAGE GRANTS 权限才能链接该对象。
您可以使用 Clean Room UI 或 Clean Room API 注册数据库、架构和对象。使用 Clean Room UI 更简单,但需要您具有 ACCOUNTADMIN 角色。您可以使用开发者 APIs,注册任何您有 OWNERSHIP 权限的对象,而无需使用 ACCOUNTADMIN 角色。
重要
注册数据库或模式时,在注册 之后 添加的对象不会注册。您必须单独注册新对象或使用 Clean Room UI 导航到 Admin > Snowflake Admin > Database Registration 并选择 Resync。
您只能链接您的账户注册的数据。也就是说,提供商无法链接使用者注册的数据,使用者也无法链接提供商注册的数据。将数据关联到 Clean Room 后,任何有权访问 Clean Room 的人都可以访问这些数据,但须遵守链接方的设置(例如联接和列策略)。
按照以下步骤使用 Clean Room UI 注册数据库、架构或对象:
以账户管理员身份 登录 Clean Room UI,随后采取以下步骤之一:
如果使用托管账户,请选择 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 表的 注册方式不同于其他对象类型。
以下过程可用于注册或取消注册对象:
对象类型 |
注册 |
取消注册 |
---|---|---|
数据库 |
|
|
架构 |
|
|
托管访问架构 |
|
|
受支持的其他任何对象类型 |
|
|
示例:
USE ROLE <ROLE-WITH-MANAGE-GRANTS-PRIVILEGE>
CALL samooha_by_snowflake_local_db.library.register_schema(['MY_DB.MY_SCHEMA']);
取消注册数据对象¶
表链接到 Clean Room 后就无法移除。但是,您可以取消注册该账户中的对象,这将移除该账户中所有 Clean Room 的访问权限。
如果您想从 Clean Room 或账户中移除数据,不要 简单地删除底层对象;这将导致 Clean Room 失效。相反,使用以下方法之一取消注册该对象。
当您从账户中取消注册对象时,还应更新您创建的所有使用此数据的 Clean Room。
任何协作者的查询如果依赖于已删除的数据,下次运行时将会失败。
要取消注册账户中的对象,请执行以下操作:
以账户管理员身份 登录 Clean Room UI,随后采取以下步骤之一:
如果使用托管账户,请选择 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 中,调用相应的过程从账户中取消注册对象:
library.unregister_db
library.unregister_schema
library.unregister_managed_access_schema
library.unregister_objects
启用外部表和 Apache Iceberg™ 表¶
要允许外部表和 Iceberg 表链接到 Clean Room,必须首先配置账户,以允许使用外部表和 Iceberg 表。启用外部表和 Iceberg 表后,即可像处理其他表一样注册、链接和使用这些表。
启用外部和 Iceberg 表的过程各不相同,具体取决于您是使用 Clean Room UI 还是 Clean Room API。
外部表和 Iceberg 表要求¶
提供商和使用者账户都必须启用外部表和 Iceberg 表,这样才能允许完全使用链接外部表或 Iceberg 表的 Clean Room。
在与托管账户共享 Clean Room 时,提供商必须始终启用外部表和 Iceberg 表。 这是因为托管账户始终使用外部表。
如果提供商和使用者分处不同的区域, 则只有使用者可以将外部表或 Iceberg 表链接到 Clean Room。
Clean Room UI 在账户级别控制外部表和 Iceberg 表。
警告
如果使用者账户未启用此功能,使用者将被阻止加入任何链接到外部表或 Iceberg 表的 Clean Room,或被阻止编辑(但仍可运行)任何已联接的、链接到这两种表之一的 Clean Room。
提供商和使用者账户中的 DCR 管理员必须执行以下步骤:
以账户管理员身份 登录 Clean Room UI,随后采取以下步骤之一:
如果使用托管账户,请选择 Admin > My Account。
如果使用 Snowflake 账户,请选择 Admin > Snowflake Admin,并以具有 ACCOUNTADMIN 角色的用户身份登录 Snowflake。
启用 External & Iceberg Tables 切换开关。这样可以在 UI 和 API 创建的 Clean Room 中启用该功能。
现在,可在管理员的 Access management for Snowflake objects 面板中选择外部表和 Iceberg 表,从而使其可用于 Clean Room,就像其他任何对象一样。
使用代码时,您必须在账户级别启用外部表 和 Iceberg 表,此外还 必须为链接到外部表或 Iceberg 表的每个 Clean Room 启用外部表和 Iceberg 表。如果您在 Clean Room UI 中启用了外部表和 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();
备注
使用 Clean Room UI 创建的现有 Clean Room 不受此方法的影响。要更新使用 Clean Room UI 创建的现有 Clean Room,您必须在代码中单独启用它们(如后续步骤所示),或者使用 Clean Room UI 启用 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 表之后,协作者可以注册并链接这些表,方式与任何其他表相同。