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:
    ...
Copy

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 de entity_b comme des clés uniques :

    entities:
      entity_a:
        ...
      entity_b:
        ...
    
    Copy
  • Spécifiez un nom de identifier pour chaque entité.

    L’exemple suivant ajoute des noms d’identificateurs aux entités entity_a et entity_b :

    entities:
      entity_a:
        identifier: entity_a_name
        ...
      entity_b:
        identifier:
          name: entity_a_name
    
    Copy
  • 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
    
    Copy

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"
Copy

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
Copy

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
Copy
definition_version: 2
entities:
  test_procedure:
    stage: C
Copy

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
Copy
definition_version: 2
entities:
  test_procedure:
    artifacts:
      - a.py
      - b.py
      - app/
Copy

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
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