Verwalten von Snowflake-Stagingbereichen

Mit den Befehlen snow stage können Sie zusätzliche Stagingbereichs-spezifische Aufgaben durchführen:

Benannten Stagingbereich erstellen

Der Befehl snow stage create erstellt einen benannten Stagingbereich, wenn er noch nicht existiert.

snow stage create <stage_name>
Copy

Um beispielsweise einen Stagingbereich mit dem Namen new_stage zu erstellen, geben Sie den folgenden Befehl ein:

snow stage create new_stage
Copy
+-----------------------------------------------------+
| key    | value                                      |
|--------+--------------------------------------------|
| status | Stage area NEW_STAGE successfully created. |
+-----------------------------------------------------+

Das folgende Beispiel zeigt, was passiert, wenn Sie versuchen, einen Stagingbereich namens packages zu erstellen, der bereits existiert.

# stage that already exists
snow stage create packages
Copy
+--------------------------------------------------------+
| key    | value                                         |
|--------+-----------------------------------------------|
| status | PACKAGES already exists, statement succeeded. |
+--------------------------------------------------------+

Dateien in und aus einem Stagingbereich kopieren

Der Befehl snow stage copy kopiert eine Datei vom lokalen Rechner auf einen Stagingbereich oder von einem Stagingbereich auf einen lokalen Rechner.

snow stage copy <source_path> <destination_path>
Copy

Entweder <source_path> oder <destination_path> muss ein lokaler Pfad sein, während der andere ein Pfad zum Stagingbereich von Snowflake sein muss. Beachten Sie Folgendes:

  • Der Stagingbereichspfad muss mit @ beginnen, wie in den folgenden Beispielen gezeigt.

  • Wenn Sie eine einzelne Datei kopieren, muss der <destination_path> ein Verzeichnis identifizieren, keine Datei. Wenn das angegebene Verzeichnis nicht existiert, wird es vom Befehl erstellt.

  • Wenn Sie ein lokales Verzeichnis in einen Stagingbereich kopieren, darf das lokale Verzeichnis nur Dateien enthalten. Verzeichnisse mit Unterverzeichnissen werden nicht unterstützt.

  • Wenn Sie ein Verzeichnis aus einem Stagingbereich in ein lokales Dateisystem kopieren, vereinfacht der Befehl derzeit seine interne Baumstruktur. Zur Veranschaulichung nehmen wir an, dass Ihr lokales Verzeichnis Folgendes enthält:

    test_case.py
    tests/abc.py
    tests/test1/x1.txt
    tests/test1/x2.txt
    

    Nach dem Kopieren des Verzeichnisses aus dem Stagingbereich enthält das Verzeichnis des lokalen Dateisystems Folgendes:

    test_case.py
    abc.py
    x1.txt
    x2.txt
    

    Bemerkung

    Wenn Sie die Dateistruktur aus dem Quellverzeichnis beibehalten möchten, können Sie die Option --recursive einfügen.

Dateien in einen Stagingbereich hochladen

Um Dateien vom lokalen Rechner in einen Stagingbereich zu kopieren, geben Sie einen Befehl ähnlich dem folgenden ein:

snow stage copy local_example_app @example_app_stage/app
Copy
put file:///.../local_example_app/* @example_app_stage/app4 auto_compress=false parallel=4 overwrite=False
+--------------------------------------------------------------------------------------
| source           | target           | source_size | target_size | source_compression...
|------------------+------------------+-------------+-------------+--------------------
| environment.yml  | environment.yml  | 62          | 0           | NONE             ...
| snowflake.yml    | snowflake.yml    | 252         | 0           | NONE             ...
| streamlit_app.py | streamlit_app.py | 109         | 0           | NONE             ...
+--------------------------------------------------------------------------------------

Sie können den Befehl snow stage list-files verwenden, um zu überprüfen, ob der Befehl die Dateien erfolgreich kopiert hat:

snow stage list-files example_app_stage
Copy
ls @example_app_stage
​+------------------------------------------------------------------------------------
| name                                   | size | md5                              | ...
|----------------------------------------+------+----------------------------------+-
| example_app_stage/app/environment.yml  | 64   | 45409c8da098125440bfb7ffbcd900f5 | ...
| example_app_stage/app/snowflake.yml    | 256  | a510b1d59fa04f451b679d43c703b6d4 | ...
| example_app_stage/app/streamlit_app.py | 112  | e6c2a89c5a164e34a0faf60b086bbdfc | ...
+------------------------------------------------------------------------------------

Dateien aus einem Stagingbereich kopieren

Das folgende Beispiel kopiert Dateien aus einem Stagingbereich in ein Verzeichnis auf dem lokalen Rechner:

mkdir local_app_backup
snow stage copy @example_app_stage/app local_app_backup
Copy
get @example_app_stage/app file:///.../local_app_backup/ parallel=4
+------------------------------------------------+
| file             | size | status     | message |
|------------------+------+------------+---------|
| environment.yml  | 62   | DOWNLOADED |         |
| snowflake.yml    | 252  | DOWNLOADED |         |
| streamlit_app.py | 109  | DOWNLOADED |         |
+------------------------------------------------+

Sie können den Inhalt des Verzeichnisses auflisten, um zu überprüfen, ob der Befehl die Dateien korrekt kopiert hat:

ls local_app_backup
Copy
environment.yml  snowflake.yml    streamlit_app.py

Beachten Sie, dass das lokale Verzeichnis existieren muss.

Sie können von einem Benutzer-Stagingbereich (@~) kopieren:

snow stage copy "@~" . --recursive
Copy
+------------------------------------------------+
| file             | size | status     | message |
|------------------+------+------------+---------|
| environment.yml  | 62   | DOWNLOADED |         |
| snowflake.yml    | 252  | DOWNLOADED |         |
| streamlit_app.py | 109  | DOWNLOADED |         |
+------------------------------------------------+

Glob-Muster zur Angabe von Dateien verwenden

Sie können mehrere Dateien angeben, die einem regulären Ausdruck entsprechen, indem Sie ein glob-Muster für das source_path-Argument verwenden. Sie müssen das glob-Muster in einfache oder doppelte Anführungszeichen einschließen.

Das folgende Beispiel kopiert alle .txt-Dateien eines Verzeichnisses in einen Stagingbereich.

snow stage copy "testdir/*.txt" @TEST_STAGE_3
Copy
put file:///.../testdir/*.txt @TEST_STAGE_3 auto_compress=false parallel=4 overwrite=False
+------------------------------------------------------------------------------------------------------------+
| source | target | source_size | target_size | source_compression | target_compression | status   | message |
|--------+--------+-------------+-------------+--------------------+--------------------+----------+---------|
| b1.txt | b1.txt | 3           | 16          | NONE               | NONE               | UPLOADED |         |
| b2.txt | b2.txt | 3           | 16          | NONE               | NONE               | UPLOADED |         |
+------------------------------------------------------------------------------------------------------------+

Inhalt eines Stagingbereichs auflisten

Der Befehl snow stage list-files listet den Inhalt des Stagingbereichs auf.

snow stage list-files <stage_path>
Copy

Um beispielsweise die Pakete in einem Stagingbereich aufzulisten, geben Sie den folgenden Befehl ein:

snow stage list-files packages
Copy
ls @packages
+-------------------------------------------------------------------------------------
| name                 | size     | md5                              | last_modified
|----------------------+----------+----------------------------------+----------------
| packages/plp.Ada.zip | 824736   | 90639175a0ac7735e67525118b81047c | Tue, 16 Jan ...
| packages/samrand.zip | 13721024 | 648f0bae2f65fd4c9f178b17c23de7e5 | Tue, 16 Jan ...
+-------------------------------------------------------------------------------------

Dateien aus einem Stagingbereich ausführen

Der Befehl snow stage execute führt SQL- oder Python-Dateien aus einem Stagingbereich aus.

snow stage execute <stage_path>
Copy
  • Für .sql-Dateien führt er einen EXECUTE IMMEDIATE FROM- Befehl für .sql-Dateien aus einem Stagingbereich aus.

  • Für .py-Dateien führt es eine in der Sitzung enthaltene Snowpark Python Prozedur aus.

    Snowflake CLI führt die Prozedur in Snowflake aus, um eine konsistente Umgebung für die Ausführung zu gewährleisten. Wenn Ihre Python-Skripte zusätzliche Anforderungen erfordern, sollten Sie diese in einer requirements.txt-Datei angeben, die sich im selben Verzeichnis wie die Dateien im Stagingbereich befindet. Der Befehl snow stage execute unterstützt nur Pakete aus dem Snowflake-Anaconda-Kanal.

    Standardmäßig sucht der Befehl nach der requirements.txt-Datei in der folgenden Rangfolge:

    • Pfad des Stagingbereichs, der im stage_path-Parameter des Befehls angegeben ist.

    • Übergeordnete Verzeichnisse der Hierarchie des angegebenen Pfads im Stagingbereich, bis der Stagingbereich erreicht ist.

    • Wenn Sie keine requirements.txt-Datei angeben, geht der Befehl davon aus, dass keine weiteren Pakete erforderlich sind.

    Wenn Sie zum Beispiel snow stage execute @my_stage/ml/app1/scripts ausführen, sucht der Befehl die Datei wie folgt:

    • my_stage/ml/app1/scripts/requirements.txt

    • my_stage/ml/app1/requirements.txt

    • my_stage/ml/requirements.txt

    • my_stage/ml/requirements.txt

Die folgenden Beispiele zeigen, wie Sie verschiedene Sätze von .sql-Dateien aus einem Stagingbereich ausführen können:

  • Geben Sie nur den Namen eines Stagingbereichs an, um alle .sql-Dateien im Stagingbereich auszuführen:

    snow stage execute "@scripts"
    
    Copy
    SUCCESS - scripts/script1.sql
    SUCCESS - scripts/script2.sql
    SUCCESS - scripts/dir/script.sql
    +------------------------------------------+
    | File                   | Status  | Error |
    |------------------------+---------+-------|
    | scripts/script1.sql    | SUCCESS | None  |
    | scripts/script2.sql    | SUCCESS | None  |
    | scripts/dir/script.sql | SUCCESS | None  |
    +------------------------------------------+
    
  • Geben Sie einen Benutzer-Stagingbereich (@~) an, um die script.sql-Dateien im Benutzer-Stagingbereich auszuführen:

    snow stage execute "@~/script1.sql"
    
    Copy
    SUCCESS - scripts/script1.sql
    +------------------------------------------+
    | File                   | Status  | Error |
    |------------------------+---------+-------|
    | @~/script.sql          | SUCCESS | None  |
    +------------------------------------------+
    

Glob-Muster verwenden, um Teilmengen von Dateien auszuwählen

  • Geben Sie ein glob-ähnliches Muster an, um alle .sql-Dateien im Verzeichnis dir auszuführen:

    snow stage execute "@scripts/dir/*"
    
    Copy
    SUCCESS - scripts/dir/script.sql
    +------------------------------------------+
    | File                   | Status  | Error |
    |------------------------+---------+-------|
    | scripts/dir/script.sql | SUCCESS | None  |
    +------------------------------------------+
    
  • Geben Sie ein glob-ähnliches Muster an, um nur .sql-Dateien im Verzeichnis dir auszuführen, die mit „script“, gefolgt von einem Zeichen beginnen:

    snow stage execute "@scripts/script?.sql"
    
    Copy
    SUCCESS - scripts/script1.sql
    SUCCESS - scripts/script2.sql
    +---------------------------------------+
    | File                | Status  | Error |
    |---------------------+---------+-------|
    | scripts/script1.sql | SUCCESS | None  |
    | scripts/script2.sql | SUCCESS | None  |
    +---------------------------------------+
    
  • Geben Sie einen direkten Dateipfad mit der Option --silent an:

    snow stage execute "@scripts/script1.sql" --silent
    
    Copy
    +---------------------------------------+
    | File                | Status  | Error |
    |---------------------+---------+-------|
    | scripts/script1.sql | SUCCESS | None  |
    +---------------------------------------+
    

Datei aus einem Stagingbereich entfernen

Der Befehl snow stage remove entfernt eine Datei aus einem Stagingbereich.

snow stage remove <stage_name> <file_name>
Copy

Um zum Beispiel eine Datei aus einem Stagingbereich zu entfernen, geben Sie einen Befehl ähnlich dem folgenden ein:

snow stage remove example_app_stage app/pages/my_page.py
Copy
+-------------------------------------------------+
| key    | value                                  |
|--------+----------------------------------------|
| name   | example_app_stage/app/pages/my_page.py |
| result | removed                                |
+-------------------------------------------------+