Projektdefinitionsdateien

Eine Projektdefinitionsdatei namens snowflake.yml deklariert ein Verzeichnis als Snowflake Native App-Projekt. Es handelt sich um eine versionskontrollierte Datei, die sich im Stammverzeichnis eines Snowflake Native App-Projektverzeichnisses befindet und entweder manuell oder durch Snowflake CLI als Teil der Projektinitialisierung erstellt werden kann. Solange Sie diese strukturierte Datei im Verzeichnis bereitstellen können, aber Ihre eigene, unabhängige Projektstruktur verwenden, kann Snowflake CLI die relevanten Dateien finden und seine Funktionen wie gewohnt ausführen.

Bei Native Apps sieht Ihre snowflake.yml-Datei ähnlich wie die folgende aus:

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: <name_of_app_pkg>
    stage: app_src.stage
    manifest: app/manifest.yml
    artifacts:
      - src: app/*
        dest: ./
      - src: src/module-add/target/add-1.0-SNAPSHOT.jar
        dest: module-add/add-1.0-SNAPSHOT.jar
      - src: src/module-ui/src/*
        dest: streamlit/
    meta:
      role: <your_app_pkg_owner_role>
      warehouse: <your_app_pkg_warehouse>
      post_deploy:
        - sql_script: scripts/any-provider-setup.sql
        - sql_script: scripts/shared-content.sql
  app:
    type: application
    identifier: <name_of_app>
    from:
      target: pkg
    debug: <true|false>
    meta:
      role: <your_app_owner_role>
      warehouse: <your_app_warehouse>
Copy

Allgemeine Eigenschaften von Entitäten

Die folgende Tabelle beschreibt allgemeine Eigenschaften, die für Entitäten der Definition von Projekten für Native Apps verfügbar sind. Weitere Informationen zu den Entitäten der Definition von Projekten finden Sie unter Entitäten angeben.

Allgemeine Eigenschaften von Entitäten

Eigenschaft

Definition

type

erforderlich, string

Der Typ der zu verwaltenden Entität. Für Snowflake Native App sind folgende Werte gültig:

Bezeichner

optional, string

Optionaler Snowflake-Bezeichner für die Entität. Es werden sowohl Bezeichner mit Anführungszeichen als auch ohne Anführungszeichen unterstützt. Um Bezeichner in Anführungszeichen zu verwenden, schließen Sie die umgebenden Anführungszeichen in den YAML-Wert ein (z. B. ’”My Native Application Package”’).

Wenn nicht angegeben, wird die Entität ID in der Definition des Projekts als Bezeichner verwendet.

meta.warehouse

optional, string

Warehouse, das zum Ausführen der Skripte verwendet wird, die als Teil von meta.post_deploy zur Verfügung gestellt werden, wenn SQL-Befehle in diesen Skripten die Verwendung von Warehouses erfordern.

Standard: Warehouse, das für die Verbindung in der Snowflake CLI-Datei config.toml angegebene ist.

Bemerkung

Wenn Sie kein Warehouse angeben, besteht die Anwendung zwar die Validierung, kann aber nicht installiert werden.

Normalerweise geben Sie diesen Wert in der Datei snowflake.local.yml an, wie unter Überschreiben von Projektdefinitionen beschrieben.

meta.role

optional, string

Rolle, die bei der Erstellung der Entität und der Anbieter-seitigen Objekte zu verwenden ist.

Bemerkung

Wenn Sie keine Rolle angeben, versucht Snowflake CLI, die Standardrolle zu verwenden, die Ihrem Benutzer in Ihrem Snowflake-Konto zugewiesen wurde.

Normalerweise geben Sie diesen Wert in der Datei snowflake.local.yml an, wie unter Überschreiben von Projektdefinitionen beschrieben.

Standard: Rolle, die in der Snowflake CLI-Verbindung angegeben ist.

meta.post_deploy

optional, sequence

Auflistung der SQL-Skripte, die nach der Erstellung der Entität ausgeführt werden sollen. Das folgende Beispiel zeigt, wie Sie diese Skripte in der Projektdefinitionsdatei definieren:

definition_version: 2
entities:
  myapp_pkg:
    type: application package
    ...
    meta:
      post_deploy:
        - sql_script: scripts/post_deploy1.sql
        - sql_script: scripts/post_deploy2.sql
Copy

Diese Skripte werden von Befehlen aufgerufen, die eine Entität erstellen oder aktualisieren. Wenn Sie zum Beispiel den Befehl snow app deploy ausführen, werden diese Skripte nach der Erstellung oder Aktualisierung eines Pakets ausgeführt. Sie werden auch von snow app run ausgeführt, wenn die Anwendungsinstanz nicht direkt über eine Version oder Release-Anweisung installiert wird.

Sie können auch Vorlagen in den SQL-Skripten nach ihrer Bereitstellung verwenden, wie das folgende Beispiel für den Inhalt des Skripts zeigt:

GRANT reference_usage on database provider_data to share in entity <% fn.str_to_id(ctx.entities.myapp_pkg.identifier) %>
Copy

meta.use_mixins

optional, sequence

Namen der Mixins, die auf diese Entität angewendet werden sollen. Weitere Informationen dazu finden Sie unter Projekt-Mixins.

Eigenschaften der Entität des Anwendungspakets

Die folgende Tabelle beschreibt allgemeine Eigenschaften, die für Entitäten von Anwendungspaketen für Native Apps verfügbar sind. Weitere Informationen zu den Entitäten der Definition von Projekten finden Sie unter Entitäten angeben.

Eigenschaften für Anwendungspaketentitäten

Eigenschaft

Definition

type

erforderlich, string

Sie müssen application package sein.

manifest

erforderlich, string

Der Speicherort der Snowflake Native App manifest.yml-Datei in Ihrem Projekt.

deploy_root

optional, string

Unterverzeichnis an der Wurzel Ihres Projekts, in das der Build-Schritt die Artefakte kopiert. Sobald sie dorthin kopiert wurden, können sie in einem Snowflake-Stagingbereich bereitgestellt werden.

Standard: output/deploy

generated_root

optional, string

Unterverzeichnis des Bereitstellungsstamms, in das Snowflake CLI die generierten Dateien schreibt.

Standard: __generated

stage

optional, string

Bezeichner des Stagingbereichs, in dem die Artefakte der Anwendung gespeichert werden. Der Wert verwendet die Form <schema_name>.<stage_name>. Der Stagingbereich befindet sich innerhalb des Anwendungspaket-Objekts. Sie können den Namen ändern, um Namenskonflikte zu vermeiden.

Standard: app_src.stage

Artefakte

erforderlich, sequence

Auflistung der Datei-Quell- und -Zielpaare, die dem Bereitstellungsstamm hinzugefügt werden sollen, sowie ein optionaler Snowpark-Anmerkungsprozessor. Sie können die folgenden Eigenschaften des Artefakts verwenden“

  • src: Pfad zur Code-Quelldatei oder zu den Dateien

  • dest: Pfad zum Verzeichnis, in dem die Artefakte bereitgestellt werden.

    Zielpfade, die auf Verzeichnisse verweisen, müssen mit einem / enden. Das Ziel eines Glob-Musters, das nicht mit einem / endet, führt zu einem Fehler. Wird nichts angegeben, weist dest standardmäßig dieselbe Zeichenfolge wie src auf.

    Sie können auch eine Zeichenfolge für jedes Element anstelle von dict übergeben. In diesem Fall wird der Wert sowohl als src als auch als dest behandelt.

  • processors: Name des Prozessors, der für die Verarbeitung der Dateien von src verwendet wird. Weitere Details dazu finden Sie unter Weitere Informationen über Artefakte-Prozessoren.

Wenn src nur auf eine Datei verweist (nicht auf einen Glob), kann dest auf einen Zielpfad <> oder einen Pfad/Namen <> verweisen.

Sie können anstelle von dict auch eine Zeichenfolge für jedes Element übergeben. In diesem Fall wird der Wert sowohl als src als auch als dest behandelt.

Beispiel ohne Prozessor:

pkg:
  artifacts:
    - src: app/*
      dest: ./
    - src: streamlit/*
      dest: streamlit/
    - src: src/resources/images/snowflake.png
      dest: streamlit/
Copy

Beispiel mit einem Prozessor:

pkg:
  artifacts:
    - src: qpp/*
      dest: ./
      processors:
          - name: snowpark
            properties:
              env:
                type: conda
                name: <conda_name>
Copy

distribution

optional, string

Verteilung des von der Snowflake CLI erstellten Anwendungspakets. Wenn Sie snow app-Befehle ausführen, gibt Snowflake CLI eine Warnung aus, wenn das Anwendungspaket, das Sie verwenden, einen anderen Wert für die Verteilung hat, als in Ihrer aufgelösten Projektdefinition festgelegt ist.

Standard: Internal

scratch_stage

optional, string

Bezeichner des Stagingbereichs, der temporäre Scratch-Daten speichert, die von Snowflake CLI verwendet werden. Der Wert hat die Form <schema_name>.<stage_name>. Der Stagingbereich befindet sich innerhalb des Anwendungspaket-Objekts. Sie können den Namen ändern, um Namenskonflikte zu vermeiden.

Standard: app_src.stage_snowflake_cli_scratch

Eigenschaften der Anwendungsentitäten

Die folgende Tabelle beschreibt allgemeine Eigenschaften, die für Anwendungsentitäten für Native Apps verfügbar sind. Weitere Informationen zu den Entitäten der Definition von Projekten finden Sie unter Entitäten angeben.

Eigenschaften für Anwendungsentitäten

Eigenschaft

Definition

type

erforderlich, string

Sie müssen application sein.

from.target

erforderlich, string

Anwendungspaket, aus dem diese Entität erstellt werden soll. Im folgenden Beispiel definiert target den Namen einer Entität in der Datei snowflake.yml.

from:
  target: my_pkg
Copy

debug

optional, boolean

Ob der Debug-Modus aktiviert werden soll, wenn ein benannter Stagingbereich zum Erstellen einer Anwendung verwendet wird.

Standard: True

Weitere Informationen über Artefakte-Prozessoren

Wenn Sie das Feld artifacts.processors in die Projektdefinitionsdatei aufnehmen, ruft der Befehl snow app bundle die benutzerdefinierte Verarbeitung für Python-Code-Dateien im Verzeichnis oder in der Datei src auf.

Dieser Abschnitt enthält eine Liste der unterstützten Prozessoren.

Snowpark-Prozessor

Einer der von Snowflake CLI unterstützten Prozessoren ist snowpark, der Snowpark- Annotationsverarbeitung auf Python-Dateien anwendet. Im Folgenden finden Sie die grundlegende Struktur und Syntax für verschiedene Umgebungen:

  • Um Code in einer conda-Umgebung auszuführen, verwenden Sie Folgendes:

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: conda
                    name: <conda_name>
    
    Copy

    wobei <conda_name> der Name der Umgebung von conda ist, die den Python-Interpreter und die Snowpark-Bibliothek enthält, die Sie für die Verarbeitung von Snowpark-Anmerkungen verwenden möchten.

  • Um Code in einer virtuellen Umgebung von Python auszuführen, verwenden Sie Folgendes:

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: venv
                    path: <venv_path>
    
    Copy

    wobei <venv_path> der Pfad der virtuellen Umgebung von Python ist, die den Python-Interpreter und die Snowpark-Bibliothek enthält, die Sie für die Verarbeitung von Snowpark-Anmerkungen verwenden möchten. Der Pfad kann absolut oder relativ zum Verzeichnis des Projekts sein.

  • Um Code in der gerade aktiven Umgebung auszuführen, verwenden Sie eine der folgenden gleichwertigen Definitionen:

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: current
    
    Copy

    oder

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
    
    Copy

    oder

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - snowpark
    
    Copy

Weitere Informationen zur benutzerdefinierten Verarbeitung finden Sie unter Automatische SQL-Code-Erstellung und dem snow app bundle-Befehl.

Vorlagenprozessor

Snowflake Native App-Projekte unterstützen Vorlagen in beliebigen Dateien, wodurch Sie Vorlagen in allen Dateien im src-Verzeichnis eines Artefakts erweitern können. Sie können dieses Feature aktivieren, indem Sie einen templates-Prozessor in die gewünschte artifacts-Definition aufnehmen, wie im folgenden Beispiel gezeigt:

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: myapp_pkg
    artifacts:
      - src: app/*
        dest: ./
        processors:
          - templates
    manifest: app/manifest.yml
  app:
    type: application
    identifier: myapp_<% fn.get_username() %>
    from:
      target: pkg
Copy

Wenn Snowflake CLI die Dateien in einen Stagingbereich hochlädt, erweitert es automatisch die Vorlagen, bevor es sie hochlädt. Nehmen wir zum Beispiel an, Ihre Anwendung enthielte eine Datei app/README.md mit folgendem Inhalt, der die Vorlage <% ctx.entities.pkg.identifier %> enthält:

This is a README file for application package <% ctx.entities.pkg.identifier %>.
Copy

Die Vorlage wird dann wie folgt erweitert, bevor die Datei in einen Stagingbereich hochgeladen wird:

This is a README file for application package myapp_pkg.
Copy

Überschreiben von Projektdefinitionen

Obwohl Ihr Projektverzeichnis eine Datei snowflake.yml enthalten muss, können Sie das Verhalten der Snowflake CLI anpassen, indem Sie snowflake.yml lokale Überschreibungen zur Verfügung stellen, z. B. eine neue Rolle, um Ihr eigenes Anwendungspaket zu testen. Diese Überschreibungen müssen in der Datei snowflake.local.yml abgelegt werden, die neben der Basisprojektdefinition besteht. Snowflake schlägt vor, dass Sie diese Datei zu Ihrer .gitignore-Datei hinzufügen, damit keine Versionskontrolle durch Git erfolgt. Alle von Snowflake bereitgestellten Vorlagen enthalten diese Datei bereits in der Datei .gitignore.

Diese Überschreibungsdatei muss sich am selben Speicherort befinden wie Ihre snowflake.yml-Datei.

Die Datei snowflake.local.yml hat das gleiche Schema wie snowflake.yml, mit dem Unterschied, dass jeder Wert, der zuvor erforderlich war, nun optional ist, zusätzlich zu den bereits bestehenden optionalen Werten. Im Folgenden sehen Sie die Beispieldatei snowflake.local.yml:

entities:
  pkg:
    meta:
      role: <your_app_pkg_owner_role>
      name: <name_of_app_pkg>
      warehouse: <your_app_pkg_warehouse>
  app:
    debug: <true|false>
    meta:
      role: <your_app_owner_role>
      name: <name_of_app>
      warehouse: <your_app_warehouse>
Copy

Jeder snow app-Befehl priorisiert die Parameter in dieser Datei gegenüber denen in der Basiskonfigurationsdatei snowflake.yml. Sinnvolle Standardeinstellungen sorgen bereits für eine Isolation zwischen Entwicklern, die dasselbe Snowflake-Konto für die Entwicklung desselben Anwendungsprojekts verwenden. Wenn Sie also gerade erst anfangen, empfehlen wir Ihnen, keine Überschreibungsdatei einzufügen.

Das endgültige Definitionsschema, das Sie erhalten, nachdem Sie snowflake.yml mit snowflake.local.yml überschrieben haben, wird die aufgelöste Projektdefinition genannt.

Einschränkungen

Derzeit, unterstützt Snowflake CLI Folgendes nicht:

  • Mehrere Überschreibungsdateien.

  • Eine leere Überschreibungsdatei. Erstellen Sie diese Datei nur, wenn Sie einen Wert aus snowflake.yml überschreiben möchten.