Exécution d’instructions SQL

Snowflake CLI vous permet d’exécuter des requêtes SQL, des requêtes ad hoc ou des fichiers contenant des requêtes SQL, en utilisant la commande snow sql.

Pour exécuter une requête ad hoc, lancez une commande similaire à la suivante :

snow sql -q "SELECT * FROM FOO"
Copy

Pour exécuter un fichier contenant une requête SQL, exécutez une commande similaire à la suivante :

snow sql -f my_query.sql
Copy

La commande snow sql peut exécuter plusieurs instructions, auquel cas plusieurs jeux de résultats sont renvoyés. Par exemple en cours exécutant :

snow sql  -q "select 'a', 'b'; select 'c', 'd';"
Copy

donne le résultat suivant :

select 'a', 'b';
+-----------+
| 'A' | 'B' |
|-----+-----|
| a   | b   |
+-----------+

select 'c', 'd';
+-----------+
| 'C' | 'D' |
|-----+-----|
| c   | d   |
+-----------+

Pour plus d’informations, voir la commande snow sql.

Utilisation de variables pour les modèles SQL

Dans certaines situations, vous pouvez souhaiter modifier vos requêtes SQL en fonction du contexte. La commande snow sql prend en charge la substitution de variables côté client, ce qui vous permet d’utiliser des variables dans la commande qui sont résolues localement avant de soumettre la requête. Les variables de la chaîne SQL prennent la forme <% variable_name %>, et l’option -D (ou --variable) spécifie la valeur de la variable.

Note

Vous pouvez actuellement utiliser la syntaxe SnowSQL &variable_name et <% variable_name %> pour les modèles. Cependant, Snowflake recommande d’utiliser la <% variable_name %>.

Par exemple, pour spécifier une base de données à l’aide d’une variable côté client, vous pouvez entrer une commande similaire à la suivante :

snow sql -q "select * from <% database %>.logs" -D "database=dev"
Copy

Lorsqu’elle est exécutée, la commande remplace la valeur dev dans la variable <% database %> pour créer le nom de fichier dev.logs, puis envoie la requête select * from dev.logs SQL à Snowflake en vue de son traitement.

Vous pouvez également spécifier plusieurs entrées variables, comme indiqué :

snow sql \
-q "grant usage on database <% database %> to <% role %>" \
-D "database=dev" \
-D "role=eng_rl"
Copy

Cet exemple génère la requête SQL suivante :

grant usage on database dev to eng_rl
Copy

Stockage de variables dans le fichier de définition du projet snowflake.yml

Il n’est pas toujours pratique de spécifier des variables en tant qu’options de ligne de commande snow sql, ou vous ne souhaitez peut-être pas spécifier des valeurs sensibles sur la ligne de commande. Dans ce cas, vous pouvez définir des variables et des valeurs dans le fichier de définition du projet snowflake.yml. Vous pouvez alors spécifier les noms des variables sous la forme <% ctx.env.<variable_name> %> au lieu d’utiliser l’option -D "<variable> = <valeur>".

En reprenant l’exemple de la section précédente, vous pourriez stocker la base de données et les variables de rôle dans le fichier snowflake.yml et modifier la requête ainsi :

snow sql -q "grant usage on database <% ctx.env.database %> to <% ctx.env.role %>"
Copy

Dans cet exemple, la commande snow sql recherche les définitions de variables dans le fichier de définition du projet et extrait les valeurs sans les rendre visibles sur la ligne de commande. Le fichier snowflake.yml doit être situé soit dans le répertoire de travail actuel, soit à l’emplacement spécifié avec l’option -p.

Pour plus d’informations sur l’enregistrement de ces valeurs dans le fichier de définition du projet, voir Utiliser des variables dans SQL.