Especificação de entidades

No arquivo de definição snowflake.yml, é possível especificar várias entidades. Cada entidade é identificada por uma chave única. O exemplo abaixo especifica duas entidades com as chaves entity_a e entity_b:

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

Cada entidade deve especificar um tipo. Os tipos com suporte atualmente incluem:

Identificadores de entidade

É possível especificar várias entidades do mesmo tipo no arquivo snowflake.yml. É possível nomear entidades das seguintes maneiras:

  • Use uma chave exclusiva na lista de entidades.

    O exemplo a seguir mostra o uso de entity_a e entity_b como chaves exclusivas:

    entities:
      entity_a:
        ...
      entity_b:
        ...
    
    Copy
  • Especifique um nome de identifier para cada entidade.

    O exemplo a seguir adiciona nomes de identificador às entidades entity_a e entity_b:

    entities:
      entity_a:
        identifier: entity_a_name
        ...
      entity_b:
        identifier:
          name: entity_a_name
    
    Copy
  • Adicione um objeto de identifier a cada entidade.

    O uso de objetos de identificador permite especificar um nome, banco de dados e esquema para cada entidade, conforme mostrado no exemplo a seguir:

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

Mixins de projeto

Em muitos casos, pode ser útil definir valores padrão para todo o projeto. Mixins fornecem uma maneira de extrair atributos comuns de entidades individuais. É possível especificar vários mixins. É possível declarar quais mixins devem ser usados por cada entidade usando a propriedade meta.use_mixins.

Ao usar mixins com uma entidade, é necessário garantir que todas as propriedades de um mixin possam ser aplicadas a essa entidade. Aplicar uma propriedade indisponível em uma entidade causa um erro. Consequentemente, em alguns casos você pode precisar usar vários mixins.

Nota

Os valores de mixin são substituídos por atributos de entidade declarados explicitamente.

O exemplo a seguir inclui dois mixins: stage_mixin e snowpark_shared. A entidade my_dashboard usa apenas stage_mixin, enquanto a entidade my_function usa ambos os mixins.

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

Se uma entidade usar vários mixins que especificam a mesma propriedade, a entidade usará o valor do mixin posterior. No exemplo a seguir, o valor da chave na entidade foo será 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

O comportamento da aplicação de valores mixins depende do tipo de valor. Para valores escalares (cadeias de caracteres, números, boolianos), os valores são substituídos.

Notação de mixin

Resultado explícito

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

No caso de sequências, os valores são mesclados para criar uma nova sequência. Esta implementação evita a criação de entradas duplicadas na sequência.

Notação de mixin

Resultado explícito

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

Para mapeamento de valores, novas chaves estão sendo adicionadas e valores existentes são atualizados. A atualização é recursiva.

Notação de mixin

Resultado explícito

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