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 si elle n’existe pas déjà.
Copier tous les fichiers du répertoire source au répertoire cible..
Exécuter des fichiers SQL à partir d’une zone 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>
Par exemple, pour créer une zone de préparation appelée new_stage
, entrez la commande suivante :
snow stage create new_stage
+-----------------------------------------------------+
| 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
+--------------------------------------------------------+
| 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>
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
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
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
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
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+------------------------------------------------+ | 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
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>
Par exemple, pour établir la liste des paquets d’une zone de préparation, entrez la commande suivante :
snow stage list-files packages
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>
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 commandesnow 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"
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 fichiersscript.sql
dans la zone de préparation de l’utilisateur :snow stage execute "@~/script1.sql"
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épertoiredir
:snow stage execute "@scripts/dir/*"
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épertoiredir
qui commencent par « script », suivi d’un caractère :snow stage execute "@scripts/script?.sql"
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
+---------------------------------------+ | 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>
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
+-------------------------------------------------+
| key | value |
|--------+----------------------------------------|
| name | example_app_stage/app/pages/my_page.py |
| result | removed |
+-------------------------------------------------+