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:
...
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
eentity_b
como chaves exclusivas:entities: entity_a: ... entity_b: ...
Especifique um nome de
identifier
para cada entidade.O exemplo a seguir adiciona nomes de identificador às entidades
entity_a
eentity_b
:entities: entity_a: identifier: entity_a_name ... entity_b: identifier: name: entity_a_name
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
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"
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
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
|
definition_version: 2
entities:
test_procedure:
stage: C
|
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
|
definition_version: 2
entities:
test_procedure:
artifacts:
- a.py
- b.py
- app/
|
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
|
definition_version: 2
entities:
test_procedure:
secrets:
secret1: v1
secret2: v2
secret3: v3
|
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
|
definition_version: 2
entities:
test_procedure:
secrets:
secret_name: v3
|
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"]
|
definition_version: 2
entities:
sproc1:
identifier:
name: sproc
schema: foo
sproc2:
identifier:
name: sproc
schema: from_entity
|