Utilisation de Snowflake Scripting dans Snowflake CLI, SnowSQL, le Classic Console et le connecteur Python¶
Cette rubrique explique comment exécuter les exemples de Snowflake Scripting dans Snowflake CLI, SnowSQL, le Classic Console et le connecteur Python.
Note
Si vous utilisez d’autres clients et interfaces (par exemple, Snowsight ou le pilote JDBC), vous pouvez ignorer cette rubrique et passer aux blocs Exécution de scripts Snowflake.
Introduction¶
Actuellement, les interfaces suivantes n’analysent pas correctement les blocs d’Exécution de scripts Snowflake :
Les méthodes
execute_stream()
etexecute_string()
dans le code du connecteur PythonNote
Les autres méthodes du connecteur Python analysent correctement les blocs d’Exécution de scripts Snowflake.
La saisie et l’exécution d’un bloc Exécution de scripts Snowflake peuvent entraîner l’erreur suivante :
SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
Pour contourner ce problème, utilisez des délimiteurs au début et à la fin d’un bloc Exécution de scripts Snowflake, si vous utilisez ces interfaces.
Les sections suivantes expliquent comment procéder :
Utilisation de délimiteurs de constante de chaîne autour d’un bloc dans une procédure stockée¶
Si vous créez une procédure stockée, placez le bloc Exécution de scripts Snowflake entre des guillemets simples ou des doubles signes de dollar. Par exemple :
CREATE OR REPLACE PROCEDURE myprocedure()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
-- Snowflake Scripting code
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
Note
Lorsque vous spécifiez le bloc Scripting directement sur la ligne de commande Snowflake CLI, les délimiteurs $$
peuvent ne pas fonctionner pour certains shells car ils interprètent ce délimiteur comme quelque chose d’autre. Par exemple, les shells bash et zsh l’interprètent comme l’ID de processus (PID). Pour remédier à cette limite, vous pouvez utiliser les alternatives suivantes :
Si vous souhaitez toujours spécifier le bloc d’exécution de scripts sur la ligne de commande, vous pouvez isoler les délimiteurs
$$
, comme dans\$\$
.Vous pouvez également placer le bloc d’exécution de scripts avec les délimiteurs par défaut
$$
dans un fichier séparé et l’appeler avec la commandesnow sql -f <filename>
.
Transmettre un bloc en tant que littéral de chaîne vers EXECUTE IMMEDIATE¶
Si vous écrivez un bloc anonyme, passez le bloc comme un littéral de chaîne dans la commande EXECUTE IMMEDIATE. Pour délimiter le littéral de chaîne, utilisez les guillemets simples ou les doubles signes de dollar.
Par exemple :
EXECUTE IMMEDIATE $$
-- Snowflake Scripting code
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
Vous pouvez également définir une variable de session qui est un littéral de chaîne contenant le bloc, et vous pouvez passer cette variable de session à la commande EXECUTE IMMEDIATE. Par exemple :
SET stmt =
$$
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
EXECUTE IMMEDIATE $stmt;
Note
Lorsque vous spécifiez le bloc Scripting directement sur la ligne de commande Snowflake CLI, les délimiteurs $$
peuvent ne pas fonctionner pour certains shells car ils interprètent ce délimiteur comme quelque chose d’autre. Par exemple, les shells bash et zsh l’interprètent comme l’ID de processus (PID). Pour remédier à cette limite, vous pouvez utiliser les alternatives suivantes :
Si vous souhaitez toujours spécifier le bloc d’exécution de scripts sur la ligne de commande, vous pouvez isoler les délimiteurs
$$
, comme dans\$\$
.Vous pouvez également placer le bloc d’exécution de scripts avec les délimiteurs par défaut
$$
dans un fichier séparé et l’appeler avec la commandesnow sql -f <filename>
.