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_aet de- entity_bcomme des clés uniques :- entities: entity_a: ... entity_b: ... 
- Spécifiez un nom de - identifierpour chaque entité.- L’exemple suivant ajoute des noms d’identificateurs aux entités - entity_aet- entity_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 
Si vous ne spécifiez pas d’identificateur, la clé de l’entité est utilisée comme nom de l’objet, sans aucune qualification de base de données ou de schéma.
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
 |