Spécifier les entités¶
Dans le fichier de définition snowflake.yml
, vous pouvez spécifier plusieurs entités. Chaque entité est identifiée par une clé unique. L’exemple ci-dessous spécifie deux entités avec les clés entity_a
et entity_b
:
entities:
entity_a:
...
entity_b:
...
Chaque entité doit spécifier un type. Les types actuellement pris en charge incluent :
Identificateurs d’entité¶
Vous pouvez spécifier plusieurs entités du même type dans le fichier snowflake.yml
. Vous pouvez nommer des entités des manières suivantes :
Utilisez une clé unique dans la liste des entités.
L’exemple suivant montre l’utilisation de
entity_a
et deentity_b
comme des clés uniques :entities: entity_a: ... entity_b: ...
Spécifiez un nom de
identifier
pour chaque entité.L’exemple suivant ajoute des noms d’identificateurs aux entités
entity_a
etentity_b
:entities: entity_a: identifier: entity_a_name ... entity_b: identifier: name: entity_a_name
Ajoutez un objet
identifier
à chaque entité.L’utilisation d’objets d’identificateurs permet de spécifier un nom, une base de données et un schéma pour chaque entité, comme indiqué dans l’exemple suivant :
entities: entity_b: identifier: name: entity_a_name schema: public database: DEV
Mixins de projets¶
Dans de nombreux cas, vous trouverez peut-être utile de définir des valeurs par défaut pour l’ensemble du projet. Les mixins offrent un moyen d’extraire des attributs communs d’entités individuelles. Vous pouvez spécifier plusieurs mixins. Vous devez déclarer quels mixins doivent être utilisés par chaque entité en utilisant la propriété meta.use_mixins
.
Lorsque vous utilisez des mixins avec une entité, vous devez vous assurer que toutes les propriétés d’un mixin peuvent être appliquées à cette entité. L’application d’une propriété qui n’est pas disponible sur une entité provoque une erreur. Par conséquent, dans certains cas, vous devrez peut-être utiliser plusieurs mixins.
Note
Les valeurs de mixin sont remplacées par des attributs d’entité explicitement déclarés.
L’exemple suivant inclut deux mixins : stage_mixin
et snowpark_shared
. L’entité my_dashboard
utilise uniquement stage_mixin
, tandis que l’entité my_function
utilise les deux 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"
Si une entité utilise plusieurs mixins qui spécifient la même propriété, l’entité utilise la valeur du mixin ultérieur. Dans l’exemple suivant, la valeur de la clé sur l’entité foo
sera 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
Le comportement de l’application des valeurs mixins dépend du type de valeur. Pour les valeurs scalaires (chaînes, nombres, booléens), les valeurs sont remplacées.
Notation de mixin |
Résultat explicite |
---|---|
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
|
Dans le cas de séquences, les valeurs sont fusionnées pour créer une nouvelle séquence. Cette implémentation évite de créer des entrées en double dans la séquence.
Notation de mixin |
Résultat explicite |
---|---|
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/
|
Pour mapper les valeurs, de nouvelles clés sont ajoutées et les valeurs existantes sont mises à jour. La mise à jour est récursive.
Notation de mixin |
Résultat explicite |
---|---|
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
|