Entitäten angeben

In der Datei mit der snowflake.yml-Definition können Sie mehrere Entitäten angeben. Jede Entität wird durch einen eindeutigen Schlüssel identifiziert. Das folgende Beispiel gibt zwei Entitäten mit den Schlüsseln entity_a und entity_b an:

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

Jede Entität muss einen Typ angeben. Derzeit werden folgende Typen unterstützt:

Bezeichner für Entitäten

Sie können mehrere Entitäten desselben Typs in der snowflake.yml-Datei angeben. Sie können Entitäten auf die folgenden Arten benennen:

  • Verwenden Sie einen eindeutigen Schlüssel in der Liste der Entitäten.

    Das folgende Beispiel zeigt die Verwendung von entity_a und entity_b als eindeutige Schlüssel:

    entities:
      entity_a:
        ...
      entity_b:
        ...
    
    Copy
  • Geben Sie für jede Entität einen identifier-Namen an.

    Das folgende Beispiel fügt Bezeichnernamen zu den Entitäten entity_a und entity_b hinzu:

    entities:
      entity_a:
        identifier: entity_a_name
        ...
      entity_b:
        identifier:
          name: entity_a_name
    
    Copy
  • Fügen Sie zu jeder Entität ein identifier-Objekt hinzu.

    Mit Bezeichnerobjekten können Sie für jede Entität einen Namen, eine Datenbank und ein Schema angeben, wie im folgenden Beispiel gezeigt:

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

Projekt-Mixins

In vielen Fällen kann es sinnvoll sein, projektweite Standardwerte festzulegen. Mixins bieten eine Möglichkeit, gemeinsame Attribute aus einzelnen Entitäten zu extrahieren. Sie können mehrere Mixins angeben. Sie müssen angeben, welche Mixins von jeder Entität verwendet werden sollen, indem Sie die meta.use_mixins-Eigenschaft verwenden.

Wenn Sie Mixins mit einer Entität verwenden, müssen Sie sicherstellen, dass alle Eigenschaften eines Mixins auf diese Entität angewendet werden können. Die Anwendung einer Eigenschaft, die auf einer Entität nicht verfügbar ist, verursacht einen Fehler. Daher müssen Sie in manchen Fällen mehrere Mixins verwenden.

Bemerkung

Mixin-Werte werden durch explizit deklarierte Attribute für Entitäten überschrieben.

Das folgende Beispiel enthält zwei Mixins: stage_mixin und snowpark_shared. Die my_dashboard-Entität verwendet nur stage_mixin, während die my_function-Entität beide Mixins verwendet.

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

Wenn eine Entität mehrere Mixins verwendet, die dieselbe Eigenschaft angeben, verwendet die Entität den Wert des späteren Mixins. Im folgenden Beispiel lautet der Wert des Schlüssels der foo: codenowrap:mixin_2_value-Entität.

mixins:
  mixin_1:
    key: mixin_1_value
  mixin_2:
    key: mixin_2_value

entities:
  foo:
    meta:
      use_mixin:
      - mixin_1
      - mixin_2
Copy

Die Verhaltensweise bei der Anwendung von Mixin-Werten hängt vom Wertetyp ab. Für skalare Werte (Zeichenfolgen, Zahlen, boolesche Werte) werden Werte überschrieben.

Mixin-Notation

Explizites Ergebnis

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

Bei Sequenzen werden die Werte zusammengeführt, um eine neue Sequenz zu erstellen. Diese Implementierung vermeidet die Erstellung doppelter Einträge in der Sequenz.

Mixin-Notation

Explizites Ergebnis

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

Für die Zuordnung von Werten werden neue Schlüssel hinzugefügt und bestehende Werte aktualisiert. Die Aktualisierung ist rekursiv.

Mixin-Notation

Explizites Ergebnis

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