Gestion de zones de préparation Snowflake

Les commandes snow stage vous permettent d’effectuer d’autres tâches spécifiques aux zones de préparation :

Créer une zone de préparation nommée

La commande snow stage create crée une zone de préparation nommée si elle n’existe pas déjà.

snow stage create <stage_name>
Copy

Par exemple, pour créer une zone de préparation appelée new_stage, entrez la commande suivante :

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

L’exemple suivant montre ce qui se passe si vous essayez de créer une zone de préparation, packages, qui existe déjà.

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

Copier des fichiers dans une zone de préparation et à partir de celle-ci

La commande snow stage copy permet de copier un fichier de la machine locale vers une zone de préparation ou d’une zone de préparation vers une machine locale.

snow stage copy <source_path> <destination_path>
Copy

L’un des chemins <chemin_source> ou <chemin_destination> doit être un chemin local, tandis que l’autre doit être un chemin vers la zone de préparation Snowflake. Remarques :

  • Le chemin de la zone de préparation doit commencer par @, comme le montrent les exemples suivants.

  • Lors de la copie d’un seul fichier, le <chemin_destination> doit identifier un répertoire et non un fichier. Si le répertoire spécifié n’existe pas, la commande le crée.

  • Lors de la copie d’un répertoire local vers une zone de préparation, le répertoire local ne doit contenir que des fichiers ; les répertoires contenant des sous-répertoires ne sont pas pris en charge.

  • Lors de la copie d’un répertoire d’une zone de préparation vers un système de fichiers local, la commande aplatit actuellement son arborescence interne. Pour illustrer ce propos, supposons que votre répertoire local contienne les éléments suivants :

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

    Après avoir copié le répertoire de la zone de préparation, le répertoire du système de fichiers local contient les éléments suivants :

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

    Note

    Si vous souhaitez conserver la structure des fichiers du répertoire source, vous pouvez inclure l’option --recursive.

Copier des fichiers vers une zone de préparation

Pour copier des fichiers de la machine locale vers une zone de préparation, entrez une commande similaire à la suivante :

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

Vous pouvez utiliser la commande snow stage list-files pour vérifier que la commande a bien copié les fichiers :

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

Copier des fichiers à partir d’une zone de préparation

L’exemple suivant copie les fichiers d’une zone de préparation dans un répertoire de la machine locale :

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

Vous pouvez dresser la liste du contenu du répertoire pour vérifier que la commande a copié les fichiers correctement :

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

Notez que le répertoire local doit exister.

Vous pouvez copier à partir d’une zone de préparation de l’utilisateur (@~) :

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

Utiliser des modèles globaux pour spécifier des fichiers

Vous pouvez spécifier plusieurs fichiers correspondant à une expression régulière en utilisant un modèle global pour l’argument source_path. Vous devez placer le modèle global entre guillemets simples ou doubles.

L’exemple suivant copie tous les fichiers .txt d’un répertoire dans une zone de préparation.

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

Lister le contenu d’une zone de préparation

La commande snow stage list-files répertorie le contenu de la zone de préparation.

snow stage list-files <stage_path>
Copy

Par exemple, pour établir la liste des paquets d’une zone de préparation, entrez la commande suivante :

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

Exécuter des fichiers à partir d’une zone de préparation

La commande snow stage execute exécute le SQL ou des fichiers Python d’une zone de préparation.

snow stage execute <stage_path>
Copy
  • Pour les fichiers .sql, elle exécute une commande EXECUTE IMMEDIATE FROM sur des fichiers .sql d’une zone de préparation.

  • Pour des fichiers .py, elle exécute une procédure Python Snowpark scopée par la session.

    Snowflake CLI exécute la procédure dans Snowflake pour garantir un environnement d’exécution cohérent. Si vos scripts Python nécessitent des exigences supplémentaires, vous devez les spécifier dans un fichier requirements.txt qui réside dans le même répertoire que les fichiers sur la zone de préparation. La commande snow stage execute ne prend en charge que les paquets du canal Snowflake Anaconda.

    Par défaut, la commande recherche le fichier requirements.txt dans la priorité suivante :

    • Chemin de zone de préparation spécifié dans le paramètre stage_path de la commande.

    • Répertoires parents de la hiérarchie du chemin de zone de préparation spécifié, jusqu’à atteinte de la zone de préparation.

    • Si vous ne spécifiez pas de fichier requirements.txt, la commande suppose qu’aucun paquet supplémentaire n’est nécessaire.

    Par exemple, si vous exécutez snow stage execute @my_stage/ml/app1/scripts, la commande recherche le fichier comme suit :

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

    • my_stage/ml/app1/requirements.txt

    • my_stage/ml/requirements.txt

    • my_stage/ml/requirements.txt

Les exemples suivants illustrent la manière d’exécuter différents ensembles de fichiers .sql à partir d’une zone de préparation :

  • Spécifiez uniquement un nom de zone de préparation pour exécuter tous les fichiers .sql de cette zone de préparation :

    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  |
    +------------------------------------------+
    
  • Spécifier une zone de préparation de l’utilisateur (@~) pour exécuter les fichiers script.sql dans la zone de préparation de l’utilisateur :

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

Utiliser des modèles glob pour sélectionner des sous-ensembles de fichiers

  • Spécifiez un modèle de type global pour exécuter tous les fichiers .sql dans le répertoire dir :

    snow stage execute "@scripts/dir/*"
    
    Copy
    SUCCESS - scripts/dir/script.sql
    +------------------------------------------+
    | File                   | Status  | Error |
    |------------------------+---------+-------|
    | scripts/dir/script.sql | SUCCESS | None  |
    +------------------------------------------+
    
  • Spécifiez un modèle de type glob pour exécuter uniquement les fichiers .sql du répertoire dir qui commencent par « script », suivi d’un caractère :

    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  |
    +---------------------------------------+
    
  • Spécifiez un chemin d’accès direct au fichier avec l’option --silent :

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

Retirer un fichier d’une zone de préparation

La commande snow stage remove supprime un fichier d’une zone de préparation.

snow stage remove <stage_name> <file_name>
Copy

Par exemple, pour supprimer un fichier d’une zone de préparation, entrez une commande similaire à la suivante :

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