Bootstrapping eines Projekts aus einer Vorlage

Um Ihnen die Instanziierung von Projekten zu erleichtern, implementiert Snowflake CLI eine Projektvorlage. Sie können Ihre eigenen Projektvorlagen erstellen oder Beispiele verwenden, die Snowflake in den öffentlichen Snowflake CLI-Vorlagen Git-Repository bereitstellt.

Der Befehl snow init erstellt ein Verzeichnis für das Projekt und füllt es mit der in der angegebenen Vorlage definierten Dateistruktur.

  • Wenn Sie die Option --no-interactive nicht angeben, fragt der Befehl nach jeder in der Vorlage (template.yml) angegebenen Variable, die Sie nicht mit der Option -D (oder --variable) angeben.

  • Wenn Sie die Option --no-interactive angeben, verwendet der Befehl die Standardwerte der Variablen (definiert durch die Vorlage). Wenn in der Vorlage kein Standardwert für eine Variable definiert ist und Sie nicht die Option -D verwenden, um ihn anzugeben, wird der Befehl mit einem Fehler beendet.

Der Befehl snow init verwendet die folgende Syntax:

snow init PATH [--template-source SOURCE] [--template NAME] [-D key1=value1 -D key2=value2...] [--no-interactive]
Copy

Wobei:

  • PATH ist ein neues Verzeichnis, in dem der Befehl das Projekt initialisiert. Wenn Sie ein bestehendes Verzeichnis angeben, wird der Befehl mit einem Fehler beendet.

  • [--template-source SOURCE] ist eine der folgenden Optionen:

    • Ein lokaler Dateipfad des Verzeichnisses der Vorlage.

    • Ein gültiges Git URL zu dem Verzeichnis, das die Projektvorlage enthält. Wenn nichts angegeben wird, verwendet der Befehl standardmäßig die Snowflake CLI-Volagen Git-Repository.

  • [--template NAME] gibt an, welches Unterverzeichnis von SOURCE als Vorlage verwendet werden soll (nützlich für Remote-Quellen). Wenn nicht angegeben, wird SOURCE als eine einzige Vorlage behandelt.

  • [-D key1=value1 -D key2=value2...] ist eine Liste von einem oder mehreren Name-Werte-Paaren, die Werte für die in der Vorlage definierten Variablen enthält (in template.yml). Der Befehl fragt nicht nach Variablen, die Sie mit dieser Option angeben.

  • [--no-interactive] deaktiviert die Aufforderung zur Eingabe durch den Benutzer. Wenn Sie diese Option verwenden, müssen Sie alle geforderten Werte mit den Optionen [-D key1=value1 -D key2=value2...] bereitstellen, andernfalls existiert der Befehl mit einem Fehler.

Weitere Informationen finden Sie in der Referenz des Befehls snow init.

Beispiele

  • Initialisieren Sie das Projekt mit der Vorlage example_snowpark aus dem Standard-Repository:

    snow init my_snowpark_test_app --template example_snowpark
    
    Copy

    Der Befehl fordert Sie zur Eingabe auf (Standardwerte sind in eckigen Klammern angegeben):

    Project identifier (used to determine artifacts stage path) [my_snowpark_project]:
    What stage should the procedures and functions be deployed to? [dev_deployment]: snowpark
    Initialized the new project in my_snowpark_test_app
    
  • Initialisieren Sie das Projekt mit der lokalen Vorlage.

    snow init new_streamlit_project --template-source ../local_templates/example_streamlit -D query_warehouse=dev_wareshouse -D stage=testing
    
    Copy

    In diesem Beispiel werden die Variablen query_warehouse und stage mit der Option -D angegeben, so dass der Befehl nur Folgendes abfragt:

    Name of the streamlit app [streamlit_app]:
    Initialized the new project in new_streamlit_project
    

Erstellen benutzerdefinierter Vorlagen

Vorlagenlayout

Eine Projektvorlage erfordert eine Datei template.yml, die Daten enthält, die erklären, wie der Befehl snow init die Vorlage darstellen soll. Wenn sich die Datei nicht im Wurzelverzeichnis der Vorlage befindet, wird snow init mit einem Fehler beendet. Weitere Informationen finden Sie unter template.yml-Syntax.

Vorlagensyntax

Vorlagenvariablen und Ausdrücke sollten in <! ... !> eingeschlossen werden. Snowflake CLI unterstützt auch grundlegende jinja2-Ausdrücke und Filter, zum Beispiel:

some_file_spec:
  filename: <! file_name !>
  size: "<! [ max_file_size_mb, 4 ] | max !> MB"
Copy

Snowflake CLI-Projektvorlagen unterstützen auch die folgende reservierte Variable sowie einen Filter:

  • project_dir_name-Variable, die automatisch in das Wurzelverzeichnis des erstellten Projekts aufgelöst wird.

    Angenommen Ihre Datei snowflake.yml enthält Folgendes:

    definition_version: "1.1"
    snowpark:
      project_name: <! project_dir_name !>
      ...
    
    Copy

    Wenn Sie dann den folgenden Befehl ausführen, um das Projekt aus Ihrer benutzerdefinierten Vorlage zu initialisieren:

    snow init examples/new_snowpark_project --template-source my_example_template/
    
    Copy

    Der Befehl snow init rendert die Datei snowflake.yml wie folgt:

    definition_version: "1.1"
    snowpark:
      project_name: new_snowpark_project
      ...
    
    Copy
  • to_snowflake_identifier-Filter, der vom Benutzer bereitgestellte Zeichenfolgen in korrekt formatierte Snowflake-Bezeichner umwandelt.

    Snowflake empfiehlt dringend, diesen Filter zu verwenden, wenn eine Variable auf ein Snowflake-Objekt verweist.

    Angenommen Ihre Datei snowflake.yml enthält Folgendes:

    definition_version: "1.1"
    streamlit:
      name: <! name | to_snowflake_identifier !>
      ...
    
    Copy

    Wenn Sie dann den folgenden Befehl ausführen, um ein Projekt aus Ihrer benutzerdefinierten Vorlage zu initialisieren:

    snow init examples/streamlit --template-source my_example_template2/ -D name='My test streamlit'
    
    Copy

    Der Befehl snow init rendert die Datei snowflake.yml wie folgt:

    definition_version: "1.1"
    streamlit:
      name: My_test_streamlit
      ...
    
    Copy

    Wenn eine Zeichenfolge nicht in einen gültigen Snowlake-Bezeichner umgewandelt werden kann, wird der Befehl snow init mit einem Fehler beendet, wie hier gezeigt:

    snow init examples/streamlit --template-source my_example_template2/ -D name=1234567890
    
    Copy
    ╭─ Error ────────────────────────────────────────────────────────────────────────╮
    │ Value '123456789' cannot be converted to valid Snowflake identifier.         │
    │ Consider enclosing it in double quotes: ""                                   │
    ╰────────────────────────────────────────────────────────────────────────────────╯
    

Über die template.yml-Projektvorlagendatei

In der Projektvorlagendatei template.yml sind alle Daten gespeichert, die zum Rendern des Projekts benötigt werden. Beispiel:

minimum_cli_version: "2.7.0"
files_to_render:
  - snowflake.yml
variables:
  - name: name
    default: streamlit_app
    prompt: "Name of the streamlit app"
    type: string
  - name: stage
    default: my_streamlit_stage
    prompt: "What stage should the app be deployed to?"
    type: string
  - name: query_warehouse
    default: my_streamlit_warehouse
    prompt: "On which warehouse SQL queries issued by the application are run"
    type: string
Copy

Die folgende Tabelle listet die Eigenschaften in einer template.yml-Projektvorlagendatei auf.

Vorlageneigenschaften

Eigenschaft

Definition

minimum_cli_version

optional, string (default:None)

Snowflake CLI-Mindestversion Wenn angegeben, prüft der Befehl snow init die installierte Version von Snowflake CLI und wird mit einem Fehler beendet, wenn die installierte Version niedriger ist als die angegebene Version.

files_to_render

optional, string list (Standard: [])

Auflistung der Dateien, die mit dem Befehl snow init gerendert werden sollen. Jeder Pfad sollte relativ zur Vorlagenwurzel sein.

Bemerkung

Vorlagendateien, die nicht in dieser Liste enthalten sind, werden dem neuen Projekt hinzugefügt, ihr Inhalt bleibt jedoch unverändert.

variables

optional, variable list (Standard: [])

Auflistung der Variablen der Vorlage. Es unterstützt die Anpassung von Eingabeaufforderungen, die Bereitstellung von Standardwerten für optionale Variablen und die grundlegende Typenprüfung. Weitere Einzelheiten finden Sie in der Tabelle Variables property parameters unten. Die Variablenwerte werden in der Reihenfolge dieser Liste ermittelt.

Wenn Sie eine Variable, die in der Datei snowflake.yml verwendet wird, nicht in dieser Liste aufführen, wird der Befehl snow init mit dem folgenden Fehler beendet.

╭─ Error ─────────────────────────────────────────────────────────╮
│ Cannot determine value of variable undefinded_variable        │
╰─────────────────────────────────────────────────────────────────╯

In der folgenden Tabelle sind die Parameter einer Variableneigenschaft aufgelistet.

Parameter für Variableneigenschaft

Eigenschaft

Definition

name

erforderlich, string

Name der Variablen. Er wird in den Vorlagendateien verwendet, z. B. <! name !> und in der -D-Option, z. B. -D name=value.

prompt

optional, string

Eingabeaufforderung an den Benutzer, um einen Wert zu erhalten. Wenn Sie diesen Parameter nicht einstellen, zeigt der Befehl den Namen des Parameters als Aufforderungstext an.

Wenn Sie die Eingabeaufforderung wie folgt definieren:

variables:
  - name: project_id
    prompt: The identifier for the project
Copy

snow init zeigt diese Eingabeaufforderung für die project_id-Variable an.

The identifier for the project:

default

optional, string/int/float

Standardwert der Variablen. Wenn sie nicht angegeben wird, wird die Variable als Anforderung behandelt, so dass der Benutzer den Wert nach einer Eingabeaufforderung oder mit der Befehlszeilenoption -D angeben muss.

Das folgende Beispiel definiert zwei Variablen mit Standardwerten:

variables:
  - name: max_file_size_mb
    default: 16
  - name: file_name
    default: 'default_file_name.zip'
Copy

Bei der Ausführung des snow init-Befehls werden die folgenden Eingabeaufforderungen für diese beiden Variablen angezeigt:

file_name [default_file_name.zip]:
max_file_size_mb [16]: 5
Copy

In diesem Beispiel verwendet der Befehl den Standardwert (default_file_name.zip) für die file_name-Variable, hat einen Standardwert und setzt max_file_size_mb auf den vom Benutzer angegebenen Wert (5).

type

optional, string

Datentyp der Variablen. Gültige Werte sind: string, int und float. Wird nichts angegeben ist, nimmt der Befehl an, dass der Wert string ist.

Das folgende Beispiel definiert eine Variable als Datentyp int:

variables:
  - name: max_file_size_mb
    type: int
Copy

Der snow init-Befehl zeigt bei der Ausführung die folgenden Fehler an, wenn der Benutzer einen Wert vom falschen Datentyp eingibt:

max_file_size_mb: not an int
Error: 'not an int' is not a valid integer.
max_file_size_mb: 14.5
Error: '14.5' is not a valid integer.
max_file_size_mb: 6
Initialized the new project in example_dir