Collaboration Data Clean Room 架构参考

本主题介绍所有协作资源的规范架构。规范以 YAML 格式显示。

规范具有架构版本字段 api_version。使用此处显示的 API 版本号;不保证支持早期的架构版本。

当前 DCR 协作 API 版本: 2.0.0

协作规范

定义高级别协作。该规范定义了邀请哪些分析运行者,以及针对每个分析运行者,他们可以访问和运行哪些数据及模板。此处列出的任何模板或数据产品都必须先注册,然后才能包含在协作规范中。

所有者通过调用 COLLABORATION.INITIALIZE 提交此定义。

架构:

api_version: 2.0.0              # Required: Must be "2.0.0"
spec_type: collaboration        # Required: Must be "collaboration"
name: <collaboration_name>      # Required: Unique name (max 75 chars)
description: <collaboration_description>  # Optional: Description (max 1,000 chars)
owner: <owner_alias>            # Optional: Alias of owner

collaborator_identifier_aliases:  # Required: Map aliases to account identifiers
  <alias_1>: <account_identifier_1>  # One or more alias mappings...

analysis_runners:               # Required: Who can run analyses
  <analysis_runner_alias>:      # One or more analysis runner definitions...
    data_providers:             # Required: Data providers for this runner
      <provider_alias>:         # One or more provider definitions...
        data_offerings:         # Required: List of offerings (can be empty [])
          - id: <data_offering_id>  # Zero or more data offering IDs...
    templates:                  # Optional: Templates this runner can use
      - id: <template_id>       # One or more template IDs...
    activation_destinations:    # Optional: Where results can be sent
      snowflake_collaborators:  # Optional: Collaborators who can receive results
        - <collaborator_alias>  # One or more collaborator aliases...
Copy
api_version

所使用的 Collaboration API 的版本。必须是 2.0.0

spec_type

规范类型标识符。必须是 collaboration

name: collaboration_name

此协作的用户友好名称。在创建者的账户中必须是唯一的,并遵循 :doc:`Snowflake 标识符规则 </sql-reference/identifiers-syntax>`(最多 75 个字符)。

:samp:`description: {collaboration_description}`(可选

人类可读的协作描述(最多 1,000 个字符),供协作者阅读。

:samp:`owner: {owner_alias}`(可选

协作所有者的别名或 数据共享账户标识符。如果未指定,则注册此规范的账户将被指定为所有者。

collaborator_identifier_aliases

协作者别名到其 数据共享账户标识符 的映射。只有此处列出的用户才能参与协作。使用此处定义的别名来引用所有协作者,而不是直接使用其数据共享账户标识符。

analysis_runners

描述谁可以在此协作中运行分析。每个分析运行者均由唯一的别名作为键。您必须允许至少一个账户在此协作中运行分析。

<analysis_runner_alias>

可以在此协作中运行分析的账户别名。别名定义在 collaborator_identifier_aliases 列表中。

data_providers

此分析运行者可以访问其数据的数据提供商。每个提供商均由在 collaborator_identifier_aliases 中定义的别名作为键。

data_offerings

分析运行者可以访问的来自此数据提供商的数据产品列表,或一个空数组 []。如果存在项目,则每个项目都具有以下属性:

  • data_offering_id:选择使用 时默认使用的角色和仓库。此数据产品的参考 ID,在数据提供商调用 REGISTRY.REGISTER_DATA_OFFERING 时生成。

``templates``(可选

此分析运行者可以使用的模板。每个模板均通过其 ID 进行引用。

``activation_destinations``(可选

定义分析结果的激活设置。

``snowflake_collaborators``(可选

可以接收已激活分析结果的协作者列表。使用本规范中 collaborator_identifier_aliases 列表里的别名。此处列出的所有协作者都必须具有 激活查询结果 中所述的权限。

示例

api_version: 2.0.0
spec_type: collaboration
name: my_sample_collaboration
owner: Owner
collaborator_identifier_aliases:
  Owner: ENG.OWNER
  AnalysisRunner_1: ENG.CONSUMER_1
  DataProvider_1: ENG.PROVIDER_1
  DataProvider_2: ENG.PROVIDER_2
  AnalysisRunner_2: ENG.PROVIDER_3
analysis_runners:
  AnalysisRunner_1:
    data_providers:
      DataProvider_1:
        data_offerings:
        - id: DCR_PREPROD_CI_PROVIDER_ANY_NAME_ZUDFTMULHQ_iuDfn_v0
      DataProvider_2:
        data_offerings: []
    templates:
    - id: test_sca_three_party_template_JOaVG_v0
  AnalysisRunner_2:
    data_providers:
      DataProvider_2:
        data_offerings: []
    templates:
    - id: test_sca_three_party_template_JOaVG_v0
Copy

数据产品规范

定义提供商愿意与分析运行者共享的一组表,以及共享规则(例如策略、列格式以及表是否必须配合模板使用)。

数据提供商通过调用 REGISTRY.REGISTER_DATA_OFFERING 提交此定义,这将返回一个可在协作定义中使用的产品 ID。

在注册数据产品的账户加入协作之前,该数据产品在协作中不可用。

您必须拥有 REGISTER DATA OFFERING 账户权限才能加入任何可以激活数据的协作;即,您是分析运行者且协作规范包含 activation_destinations 字段。有关更多信息,请参阅 访问管理 API 参考指南

架构:

api_version: 2.0.0              # Required: Must be "2.0.0"
spec_type: data_offering        # Required: Must be "data_offering"
name: <data_offering_name>      # Required: Unique name (max 75 chars)
version: <version_string>       # Required: Version identifier (max 20 chars)
description: <data_offering_description>  # Optional: Description (max 1,000 chars)

datasets:                       # Required: Tables to share
  - alias: <dataset_name>       # One or more dataset items...
    data_object_fqn: <database.schema.table_name>  # Required: Fully-qualified table name
    allowed_analyses: <allowed_analysis_type>      # Required: template_only or template_and_freeform_sql
    object_class: <object_class>    # Optional: ads_log or custom
    schema_and_template_policies:   # Required: Column definitions
      <column_name>:                # One or more column definitions...
        category: <category_type>   # Required: join_standard, join_custom, timestamp, or passthrough
        column_type: <format_type>  # Required for join_standard category, omitted for other categories.
        activation_allowed: <true_or_false>  # Optional: Whether column can be used for activation
    freeform_sql_policies:      # Optional: Policies for freeform SQL queries
      aggregation_policy:       # Optional: Single aggregation policy
        name: <fully_qualified_policy_name>
        entity_keys:            # Optional: Entity key columns
          - <column_name>       # One or more column names...
      join_policy:              # Optional: Single join policy
        name: <fully_qualified_policy_name>
        columns:                # Optional: Columns this policy applies to
          - <column_name>       # One or more column names...
      masking_policies:         # Optional: Masking policies
        - name: <fully_qualified_policy_name>  # One or more masking policy items...
          columns:              # Optional: Columns this policy applies to
            - <column_name>     # One or more column names...
      projection_policies:      # Optional: Projection policies
        - name: <fully_qualified_policy_name>  # One or more projection policy items...
          columns:              # Optional: Columns this policy applies to
            - <column_name>     # One or more column names...
      row_access_policy:        # Optional: Row access policies
        - name: <fully_qualified_policy_name>  # One or more row access policy items...
          columns:              # Optional: Columns this policy applies to
            - <column_name>     # One or more column names...
    require_freeform_sql_policy: <true_or_false>  # Optional: Require a policy for freeform SQL
Copy
api_version

所使用的 Collaboration API 的版本。必须是 2.0.0

spec_type

规范类型标识符。必须是 data_offering

version

此数据产品规范的自定义版本标识符(最多 20 个字符)。必须遵循 Snowflake 标识符规则。一个推荐的版本控制方案是 YYYY_MM_DD_V#。例如:2025_06_21_V1

name: data_offering_name

要向协作者公开的一组表和列的名称。此名称用作协作定义中的数据产品参考值。您可以针对不同的用例,创建包含重叠表和列的多个数据产品。必须遵循 Snowflake 标识符规则,长度最多 75 个字符,并且在您的 Snowflake Data Clean Room 账户中是唯一的。name_version 对在此账户的所有数据产品中必须是唯一的。

:samp:`description: {data_offering_description}`(可选

数据产品的描述(最多 1,000 个字符)。

datasets

可供协作使用的一个或多个数据集的列表。

alias: dataset_name

此数据对象的名称,用于 collaboration.run。必须遵循 Snowflake 标识符规则 并在此产品中保持唯一。

data_object_fqn: fully_qualified_table_name

描述可供协作者使用的单个表。提供账户中源对象的完全限定名称 (database.schema.table_name)。最大长度为 773 个字符。

allowed_analyses: allowed_analysis_type

协作者可以针对此表运行的分析类型。必填字段,具有以下值:

  • template_only:选择使用 时默认使用的角色和仓库。分析运行者只能使用协作定义中列出的模板来查询此表。

  • template_and_freeform_sql:选择使用 时默认使用的角色和仓库。分析运行者可以使用协作定义中列出的模板查询此表,或者在代码环境中使用 自由格式 SQL 查询

``object_class``(可选

对象类型。以下值之一:

  • ads_log:选择使用 时默认使用的角色和仓库。此处列出的表和列必须符合广告日志要求。

  • custom:选择使用 时默认使用的角色和仓库。一组没有特殊要求的自定义表和列。

schema_and_template_policies

提供由 data_object_fqn 列出的表中的列名列表,并定义每列的策略和格式。只有此处列出的列可供协作者使用。每列具有以下描述符:

category: category_type

类别决定了是否应用列重命名,以及应应用哪些数据格式强制执行。categorycolumn_type 决定了向分析运行者公开的列名。支持以下值:

  • join_standard:选择使用 时默认使用的角色和仓库。这是一个可联接列,其数据采用 column_type 字段中指定的格式。此列在共享数据产品中被重命名为 column_type 值。

  • join_custom:选择使用 时默认使用的角色和仓库。这是任何格式的可联接列。当联接列没有合适的 column_type 时,请使用此项。在共享数据产品中使用原始列名。

  • timestamp:选择使用 时默认使用的角色和仓库。这是一个可投影列,用于指定任何事件的时间戳。该列在共享数据产品中重命名为 timestamp

  • passthrough:选择使用 时默认使用的角色和仓库。这是任何其他类型的可投影列。在共享数据产品中使用原始列名。

``column_type: <format_type>``(当 category=join_standard 时必填,其他类别类型则忽略

数据的格式。如果数据不符合此格式,则您对 REGISTER_DATA_OFFERING 的调用将失败。为符合 category = join_standard 的列提供此字段。categorycolumn_type 决定了向分析运行者公开的列名。您不能为同一个表中的多个列分配相同的 column_type 值。支持以下格式类型:

  • email:选择使用 时默认使用的角色和仓库。原始电子邮件地址。

  • hashed_email_sha256:选择使用 时默认使用的角色和仓库。经 SHA256 哈希处理的电子邮件。

  • hashed_email_b64_encoded:选择使用 时默认使用的角色和仓库。Base64 编码的哈希电子邮件。

  • phone:选择使用 时默认使用的角色和仓库。不带标点符号的电话号码。例如:2015551212

  • hashed_phone_sha256:选择使用 时默认使用的角色和仓库。经 SHA256 哈希处理的电话号码。原始号码应采用 phone 格式。

  • hashed_phone_b64_encoded:选择使用 时默认使用的角色和仓库。Base64 编码的哈希电话号码。

  • device_id:选择使用 时默认使用的角色和仓库。原始设备 ID,例如移动广告 ID 或 CTV 设备 ID。

  • hashed_device_id_sha256:经 SHA256 哈希处理的设备 ID。原文应采用 device_id 格式。

  • hashed_device_b64_encoded:选择使用 时默认使用的角色和仓库。Base64 编码的哈希设备 ID。

  • ip_address:选择使用 时默认使用的角色和仓库。采用 IPv4 格式的原始 IP 地址。

  • hashed_ip_address_sha256:经 SHA256 哈希处理的 IPv4 地址。原文应采用 ip_address 格式。

  • hashed_ip_address_b64_encoded:选择使用 时默认使用的角色和仓库。Base64 编码的哈希 IP 地址。

``activation_allowed``(可选

此列是否可用于激活目的。默认值为 false

``freeform_sql_policies``(可选

如果 allowed_analysestemplate_and_freeform_sql,则此可选字段列出了在此数据产品上运行的 SQL 自由格式查询中应应用的任何 Snowflake 策略。有关更多信息,请参阅 在数据产品上应用策略(仅限自由格式查询使用)

支持以下类型:

``aggregation_policy``(可选

单个 聚合策略 配置。

  • name:选择使用 时默认使用的角色和仓库。完全限定的策略名称。

  • ``entity_keys``(可选):用作聚合策略实体键的列名列表。

``join_policy``(可选

单个 联接策略 配置。

  • name:选择使用 时默认使用的角色和仓库。完全限定的策略名称。

  • ``columns``(可选):此策略适用的列名列表。

``masking_policies``(可选

掩码策略 配置数组。

  • name:选择使用 时默认使用的角色和仓库。完全限定的策略名称。

  • ``columns``(可选):此策略适用的列名列表。

``projection_policies``(可选

投影策略 配置数组。

  • name:选择使用 时默认使用的角色和仓库。完全限定的策略名称。

  • ``columns``(可选):此策略适用的列名列表。

``row_access_policy``(可选

行访问策略 配置数组。

  • name:选择使用 时默认使用的角色和仓库。完全限定的策略名称。

  • ``columns``(可选):此策略适用的列名列表。

``require_freeform_sql_policy``(可选

此数据源是否必须定义 freeform_sql_policies。这用作故障保护,以防止在未分配策略的情况下添加支持自由格式 SQL 查询的数据源。

模板资源规范

定义协作中的单个模板。发送至 REGISTRY.REGISTER_TEMPLATE 以注册要在协作中使用的模板。

架构:

api_version: 2.0.0              # Required: Must be "2.0.0"
spec_type: template             # Required: Must be "template"
name: <template_name>           # Required: Unique name (max 75 chars)
version: <version_string>       # Required: Version identifier (max 20 chars)
type: <template_type>           # Required: sql_analysis or sql_activation
description: <template_description>  # Optional: High-level description (max 1,000 chars)
methodology: <methodology_description>  # Optional: Detailed description (max 1,000 chars)

parameters:                     # Optional: User-provided parameters
  - name: <parameter_name>      # One or more parameter items...
    description: <parameter_description>  # Optional: Description (max 500 chars)
    required: <true_or_false>   # Optional: Whether required (default: false)
    default: <default_value>    # Optional: Default value
    type: <data_type>           # Optional: String, integer, number, Boolean, array, or object

template: |                     # Required: JinjaSQL template content
  <template_content>
Copy
api_version

所使用的 Collaboration API 的版本。必须是 2.0.0

spec_type

规范类型标识符。必须是 template

name: template_name

此模板的唯一且用户友好名称。必须遵循 Snowflake 标识符规则,最多 75 个字符。name_version 对在此账户的所有模板中必须是唯一的。

version: version_string

此模板的版本标识符(最多 20 个字符)。必须遵循 Snowflake 标识符规则。推荐使用的格式是 YYYY_MM_DD_V#。例如:2025_10_22_V1

type

模板类型。以下值之一:

  • sql_analysis:选择使用 时默认使用的角色和仓库。数据分析操作模板。

  • sql_activation:选择使用 时默认使用的角色和仓库。数据激活操作模板。

:samp:`description: {template_description}`(可选

对此模板功能的简要描述(最多 1,000 个字符)。

:samp:`methodology: {methodology_description}`(可选

关于此模板工作原理的更详细说明(最多 1,000 个字符)。

``parameters``(可选

此模板中所有用户提供的参数列表。每个项目可以具有以下字段:

  • name:选择使用 时默认使用的角色和仓库。作为有效 Snowflake 标识符 的参数名称。

  • ``description``(可选):人类可读的参数描述(最多 500 个字符)。

  • ``required``(可选):参数是否必填。默认值为 false

  • ``default``(可选):参数默认值,可以是任何数据类型。

  • ``type``(可选):参数的预期数据类型。以下之一:stringintegernumberbooleanarrayobject

template

模板内容。对于 SQL 模板,这包含 JinjaSQL 模板。有关更多信息,请参阅 协作的模板设计

向模板公开的列名由 数据产品定义 中该列的 categorycolumn_type 值决定。有关更多信息,请参阅 源列重命名

示例:

api_version: 2.0.0
spec_type: template
name: trivial_template
version: 2025_01_01_v1
type: sql_analysis
description: Simple one-row template.
methodology: Always returns "1". Requires one source table.

parameters:
  - name: row_count
    description: Count of rows
    required: true

template: |
    SELECT 1 FROM IDENTIFIER( {{ source_table[0] }} ) LIMIT {{ row_count }};
Copy

分析请求规范

指定分析运行者运行分析所需的所有信息,包括要使用的模板、要传递给模板的表以及模板使用的任何变量值。如果不使用自由格式 SQL 查询数据,任何想要运行分析的分析运行者都会使用此规范来定义模板和输入数据。

架构:

api_version: 2.0.0              # Required: Must be "2.0.0"
spec_type: analysis             # Required: Must be "analysis"
template: <template_id>         # Required: ID of the template to use
name: <analysis_name>           # Optional: Unique name (max 75 chars)
version: <version_string>       # Optional: Version identifier (max 20 chars)
description: <analysis_description>  # Optional: Description (max 1,000 chars)

template_configuration:         # Optional: Values used when running the template
  view_mappings:                # Optional: Mappings for shared data
    source_tables:              # Optional: Tables from data offerings
      - <source_table_name>     # One or more source table names...
  local_view_mappings:          # Optional: Mappings for local data
    my_tables:                  # Optional: Tables from local data offerings
      - <my_table_name>         # One or more local table names...
  arguments:                    # Optional: Template arguments as key-value pairs
    <argument_name>: <argument_value>  # One or more argument key-value pairs...
Copy
api_version

所使用的 Collaboration API 的版本。必须是 2.0.0

spec_type

规范类型标识符。必须是 analysis

template: template_name

用于此分析的模板 ID,定义在 模板 YAML 中。必须遵循 Snowflake 标识符规则,最多 75 个字符。

``name``(可选

此分析的唯一且用户友好名称。必须遵循 Snowflake 标识符规则,长度最多 75 个字符,并且在您的 Snowflake Data Clean Room 账户中是唯一的。

``version``(可选

此分析规范的版本标识符(最多 20 个字符)。必须遵循 Snowflake 标识符规则,且在您的账户中针对此分析名称是唯一的。推荐使用的格式是 YYYY_MM_DD_V#。例如:2025_10_22_V1

``description``(可选

对此分析功能的简要描述(最多 1,000 个字符)。

``template_configuration``(可选

运行指定模板时使用的值。

``source_tables``(可选

用于填充 source_table 模板变量的表名列表。使用数据产品规范中指定的表别名。您可以通过调用 COLLABORATION.VIEW_DATA_OFFERINGS 获取可用表的列表。每个条目的格式为 collaborator alias.data offering ID.dataset alias

``my_tables``(可选

用于填充 my_table 模板变量的表名列表。这仅适用于通过调用 LINK_LOCAL_DATA_OFFERING 链接的私有数据集。每个条目的格式为 collaborator alias.data offering ID.dataset alias

``arguments``(可选

以键值对形式呈现的模板实参。实参值可以是字符串、数字、布尔值、数组或对象,具体取决于模板要求。在任何请求中使用以下实参:

  • collaborator_name:选择使用 时默认使用的角色和仓库。激活请求必填。将值设置为应接收已激活结果的协作者别名。此协作者必须列在协作规范的 activation_destinations 部分中。

  • segment_name:选择使用 时默认使用的角色和仓库。激活请求必填。将值设置为任意段名称,以帮助接收者过滤结果。

语言: 中文