Snowflake Data Clean Room 概述

本主题提供构成协作的组件的概括性指南,并概述创建或使用 Snowflake Data Clean Room Collaboration 的基本步骤。

要求

  • 您必须 已更新到最新版本的 Snowflake Data Clean Room

  • 您需要拥有 Data Clean Rooms Collaboration API 的访问权限才能查看或管理协作。有关更多信息,请参阅 管理对协作、资源和数据的访问

  • 数据提供商必须使用 Snowflake Enterprise Edition。所有者和分析运行者可以使用 Standard Edition。

  • 如果您使用的是 Snowflake Standard Edition,则无法通过具有策略强制执行机制的 Data Clean Room 来共享数据。不过,您可以访问其他协作者的数据产品,或者或在没有策略或不共享数据的情况下 使用您自己的数据

  • 将结果激活 到另一个 Snowflake 账户,您必须使用 Snowflake Enterprise Edition。

  • 试用账户不支持 Snowflake Data Clean Rooms。

协作中的角色和资源

要了解如何使用协作,您必须首先了解协作角色和协作资源。

协作角色

协作中可使用以下角色。这些角色定义了协作者的高层级能力。

  • 所有者: 所有者定义、创建和拥有协作,并定义受邀协作者及其协作角色。所有者不会自动成为分析运行者或数据提供商,并且没有任何提升的运行权限。所有者的主要能力是创建 Clean Room、分配协作角色、确定谁可以与谁共享数据,以及删除 Clean Room。一个协作只能有一个所有者。

  • 数据提供商: 向协作提供数据产品,例如表和视图,并指定哪些分析运行者可以使用这些产品。也就是说,如协作规范中所指定,账户 A 是账户 B 和 C 的数据提供商。

  • 分析运行者: 根据协作规范的指定,在允许的数据产品上运行允许的模板。

这些角色在用于创建协作的协作规范中指定。

可以为一个协作者分配多个协作角色,并且(除了所有者角色之外)一个协作角色可以分配给多个协作者。

协作资源

协作包含多种资源,包括数据产品、模板和代码捆绑包。所有资源以及协作本身均由 YAML 规范定义。

协作支持以下类型的资源:

  • 模板: 一个 JinjaSQL 查询,分析运行者可以在协作中执行该查询。根据模板的类型,结果可以直接交付,也可以 *激活*(保存)到指定协作者的 Snowflake 账户中。分析运行者可以在运行时向模板传入值,以替换用于列名、WHERE 子句和其他查询元素的模板变量。

  • 数据产品: 数据提供商与特定分析运行者共享的一个或多个表的包。数据产品是源数据的实时视图,而非快照,其规范控制哪些列被暴露以及应用哪些策略。

  • 代码捆绑包: 一组可由模板调用的自定义 Python 函数或存储过程。代码捆绑包允许您通过用户定义的逻辑(例如机器学习模型或自定义转换)来扩展模板的功能。

Clean Room 规范示例

以下是一个基本 Clean Room 的 YAML 规范,涉及两个参与者 alice``(账户 ``corp1.acct123 的别名)和 bob``(账户 ``corp2.acctxyz 的别名)。该规范为每个用户分配角色,并将两个数据产品链接到协作中。

api_version: 2.0.0
spec_type: collaboration
name: basic_collaboration
owner: alice                # alice is the collaboration owner.
collaborator_identifier_aliases:
  alice: corp1.acct123
  bob: corp2.acctxyz
analysis_runners:
  alice:                    # alice is also an analysis runner.
    data_providers:
      alice:                # alice provides data to herself.
        data_offerings:     # alice provides these data offerings.
        - id: alice_data_1
        - id: alice_data_2
      bob:                  # bob provides data to alice.
        data_offerings:     # bob provides this data to alice.
        - id: bob_data_1
    templates:              # alice can use this template with any data she can access.
    - id: template1
  bob:                      # bob is an analysis runner
    data_providers:         # bob can use data from the following data providers.
      alice:
        data_offerings:     # alice provides the following data to bob.
        - id: alice_data_1
    templates:              # bob can use this template with any data he can access.
    - id: template2

这种简单的协作包括以下资源和协作角色:

  • alice 是协作所有者、分析运行者,同时也是她自己和 bob 的数据提供商。

  • bob 是分析运行者,并且是 alice 的数据提供商,但 不能 作为自己的数据提供商。

  • alice 可以运行 template1bob 可以运行 template2

关于此协作的其他注意事项:

  • 根据此规范创建协作后,不能再添加新的协作者。

  • alicebob 都可以添加新模板,并与任何其他协作者共享。

  • 角色不可更改,因此 bob 之后无法成为自己的数据提供商。

  • 任何数据提供商都可以在其数据产品列表中添加或移除数据产品,即使在协作创建之后也可以这样做。

基本 Clean Room 协作工作流程

以下是简单的 Clean Room 协作场景:

  1. 协作所有者可以选择注册他们希望在协作的初始配置中显示的任何模板或数据产品。

  2. 所有者可以选择要求任何预期协作者注册他们希望在协作的初始配置中显示的任何模板或数据产品。然后,协作者提供他们注册的任何项目的资源 IDs。

  3. 然后,所有者创建协作。协作规范定义了协作者、他们的角色以及协作初始状态下应可用的任何资源。

    • 此时,协作者集及其 Collaboration 角色是固定的。

    • 如果协作包括其他云托管区域的协作者,他们必须 为其账户启用 Cross-Cloud Auto-Fulfillment,然后才能查看和加入协作。

    • 协作创建后,协作规范中的所有协作者都将能够看到并加入该协作。

  4. 协作者查看并加入协作。

  5. 然后,协作者可以根据其角色 选择性地将资源链接到协作中。数据提供商可以向其分析运行者链接数据提供项;任何角色都可以请求添加模板并与任何其他协作者共享。

  6. 然后,分析运行者可以使用协作中与他们共享的任何数据提供项,运行与他们共享的任何模板。分析运行者承担分析成本。模板可以在响应中返回查询结果,也可以 将结果激活并传递给调用方或其他协作者

了解详情

创建协作

任何具有适当权限的 Snowflake Data Clean Room 用户都可以创建 Clean Room。Clean Room 通过 YAML 规范来定义,该规范确定了所有协作者及其在协作中的相应角色,以及协作初始配置中存在的任何资源。(资源所有者必须先加入,然后才能使用资源。)可以在创建协作后添加或移除资源,但协作者列表及其相关角色在创建协作后是固定的。

协作没有版本控制:协作可能会随着资源的添加或移除而更改,但不会跟踪这些更改。

向协作中添加资源

协作访问多种资源,包括模板、数据产品和代码捆绑包。要在协作中使用某个资源,您必须首先在 Clean Room 环境中 注册 该资源,然后将其 链接 到特定的协作中:

  • 注册 是一个账户级别的操作;它会将资源打包并复制到 Clean Room 环境中,并返回一个用于引用该资源的 ID。资源在注册表中注册,注册表可以是账户的默认注册表,也可以是账户中某人创建的自定义注册表。默认注册表可供账户中任何拥有 READ REGISTRY 权限的协作者使用;自定义注册表可由注册表的创建者进行访问控制。

  • 链接 是将已注册的资源与特定的协作共享。更具体地说,是将已注册的资源与特定协作中的一组特定协作者共享。您可以通过将资源添加到用于创建协作的协作规范中来链接资源,也可以调用相应的 Collaboration API 过程将资源链接到协作中。

资源可以在协作创建时或协作创建之后添加到协作中。

与协作不同,资源具有版本。资源的新版本不会覆盖旧版本。如果您想用新版本替换某个资源,您还需要更新协作,移除旧版本(如果选择)并添加新版本。

注册资源的账户必须是协作者,并且必须加入协作,然后他们所注册的任何资源才能在协作中使用。

加入协作

协作规范中列出的所有协作者都可以看到该协作。所有协作者(包括创建者)都必须加入协作。除所有者之外的所有协作者在加入之前必须先审阅协作。审阅协作会将协作规范公开给被邀请方。审阅协作后,被邀请方即可加入协作。您必须先加入协作,然后才能使用您提供给协作的任何资源。

您可以通过对协作调用 GET_STATUS 来查看您的加入状态(已邀请、正在联接、已联接)。大多数协作变更操作(例如,链接资源、加入协作或激活结果)要么是异步的,要么可能需要一些时间才能传播给其他协作者,因此您应该调用相应的过程来查看变更的状态。

运行分析

在协作中列为分析运行者的协作者,可以对协作中可供他们使用的任何数据产品运行查询。

协作支持以下类型的分析:

  • 模板化分析查询:分析运行者可以运行分配给他们的任何模板,并同步查看结果。

  • 激活分析:如果数据产品、协作和模板都允许,分析运行者可以将结果激活(保存)到指定协作者的 Snowflake 账户中。

  • 自由形式 SQL 分析:如果协作和数据产品允许,分析运行者可以直接对数据产品的数据运行 SQL 查询。请参阅 自由格式 SQL 查询

退出或删除协作

您可以随时离开某个协作,但协作所有者不能离开协作,而是需要为所有人删除该协作。

  • 非所有者通过调用 LEAVE 来退出协作。他们提供的任何数据产品都将从协作中移除。退出协作后,您无法重新加入协作。

  • 协作所有者不能离开协作:所有者身份不可转移。协作所有者可以通过调用 TEARDOWN,为所有协作者删除协作。

离开或删除协作是异步的。您必须调用 GET_STATUS 以监控状态,并在 GET_STATUS 将状态显示为 LOCAL_DROP_PENDING 时,再次调用 LEAVE 或 TEARDOWN。

删除协作不会影响已链接到该协作中的任何资源的注册状态。这些资源可以继续使用,或链接到新的协作中。