指定实体

snowflake.yml 定义文件中,您可以指定多个实体。每个实体都由一个唯一的密钥进行标识。以下示例使用 entity_aentity_b 密钥指定了两个实体:

entities:
  entity_a:
    ...
  entity_b:
    ...
Copy

每个实体都必须指定一个类型。目前支持的类型包括:

实体标识符

可以在 snowflake.yml 文件中指定多个相同类型的实体。您可以通过以下方式命名实体:

  • 在实体列表中使用唯一密钥。

    以下示例显示了使用 entity_aentity_b 作为唯一密钥:

    entities:
      entity_a:
        ...
      entity_b:
        ...
    
    Copy
  • 为每个实体指定一个 identifier 名称。

    以下示例向 entity_aentity_b 实体添加标识符名称:

    entities:
      entity_a:
        identifier: entity_a_name
        ...
      entity_b:
        identifier:
          name: entity_a_name
    
    Copy
  • 向每个实体添加一个 identifier 对象。

    使用标识符对象允许为每个实体指定名称、数据库和架构,如以下示例所示:

    entities:
      entity_b:
        identifier:
          name: entity_a_name
          schema: public
          database: DEV
    
    Copy

如果未指定标识符,则使用实体密钥作为对象的名称,而不需要任何数据库或架构限定。

项目 mixin

在许多情况下,您可能会发现定义项目范围的默认值非常有用。Mixin 提供了一种从单个实体中提取常见属性的方法。您可以指定多个 mixin。您需要使用 meta.use_mixins 属性声明每个实体应使用哪些 mixin。

在实体中使用 mixin 时,必须确保 mixin 的所有属性都可以应用于该实体。应用实体上不可用的属性会导致错误。因此,在某些情况下,您可能需要使用多个 mixin。

备注

显式声明的实体属性可覆盖 Mixin 值。

以下示例包括两个混合:stage_mixinsnowpark_sharedmy_dashboard 实体仅使用 stage_mixin,而 my_function 实体会使用这两种 mixin。

definition_version: 2
mixins:
  stage_mixin:
    stage: "my_stage"
  snowpark_shared:
    artifacts: ["app/"]
    imports: ["@package_stage/package.zip"]

entities:
  my_function:
    type: "function"
    ...
    meta:
      use_mixins:
        - "stage_mixin"
        - "snowpark_shared"
  my_dashboard:
    type: "dashboard"
    ...
    meta:
      use_mixins:
        - "stage_mixin"
Copy

如果一个实体使用多个指定相同属性的 mixin,则该实体会使用后期 mixin 的值。在以下示例中,foo 实体上密钥值将为 mixin_2_value

mixins:
  mixin_1:
    key: mixin_1_value
  mixin_2:
    key: mixin_2_value

entities:
  foo:
    meta:
      use_mixin:
      - mixin_1
      - mixin_2
Copy

应用 mixin 值的行为取决于值类型。对于标量值(字符串、数字、布尔),值将被覆盖。

Mixin 表示

明确的结果

definition_version: 2
mixins:
  mix1:
    stage: A

  mix2:
    stage: B

entities:
  test_procedure:
    stage: C
    meta:
      use_mixins:
        - mix1
        - mix2
Copy
definition_version: 2
entities:
  test_procedure:
    stage: C
Copy

如果是序列,则合并值以创建新序列。此实施可避免在序列中创建重复条目。

Mixin 表示

明确的结果

definition_version: 2
mixins:
  mix1:
    artifacts:
    - a.py

  mix2:
    artifacts:
    - b.py

entities:
  test_procedure:
    artifacts:
      - app/
    meta:
      use_mixins:
        - mix1
        - mix2
Copy
definition_version: 2
entities:
  test_procedure:
    artifacts:
      - a.py
      - b.py
      - app/
Copy

对于映射值,将添加新键并更新现有值。更新具有递归性。

Mixin 表示

明确的结果

definition_version: 2
mixins:
  mix1:
    secrets:
      secret1: v1

  mix2:
    secrets:
      secret2: v2

entities:
  test_procedure:
    secrets:
      secret3: v3
    meta:
      use_mixins:
        - mix1
        - mix2
Copy
definition_version: 2
entities:
  test_procedure:
    secrets:
      secret1: v1
      secret2: v2
      secret3: v3
Copy
definition_version: 2
mixins:
  mix1:
    secrets:
      secret_name: v1

  mix2:
    secrets:
      secret_name: v2

entities:
  test_procedure:
    secrets:
      secret_name: v3
    meta:
      use_mixins:
        - mix1
        - mix2
Copy
definition_version: 2
entities:
  test_procedure:
    secrets:
      secret_name: v3
Copy
definition_version: 2
mixins:
  shared:
    identifier:
      schema: foo

entities:
  sproc1:
    identifier:
      name: sproc
    meta:
      use_mixins: ["shared"]
  sproc2:
    identifier:
      name: sproc
      schema: from_entity
    meta:
      use_mixins: ["shared"]
Copy
definition_version: 2
entities:
  sproc1:
    identifier:
      name: sproc
      schema: foo
  sproc2:
    identifier:
      name: sproc
      schema: from_entity
Copy
语言: 中文