Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector¶
This topic explains how to run the Snowflake Scripting examples in Snowflake CLI, SnowSQL, and the Python Connector.
Nota
If you are using other clients and interfaces, such as Snowflake CLI or the JDBC driver, you can skip this topic and refer to Snowflake Scripting blocks.
Introdução¶
Atualmente, as seguintes interfaces não analisam corretamente os blocos de script do Snowflake:
Os métodos
execute_stream()eexecute_string()no código do conector Python.Nota
Os outros métodos do conector Python analisam corretamente os blocos de script do Snowflake.
Entrar e executar um bloco do Script Snowflake pode resultar no seguinte erro:
SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
Para contornar esse problema, use delimitadores no início e no fim de um bloco do Script Snowflake se estiver usando essas interfaces.
As seções a seguir explicam como fazer isso:
Como usar delimitadores de constante de cadeia de caracteres em torno de um bloco em um procedimento armazenado¶
Se você estiver criando um procedimento armazenado, coloque o bloco do Script Snowflake entre aspas simples ou cifrões duplos. Por exemplo:
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;
$$
;
Nota
Ao especificar o bloco de script diretamente na linha de comando Snowflake CLI, os delimitadores $$ podem não funcionar em alguns shells porque eles interpretam esse delimitador como outra coisa. Por exemplo, os shells bash e zsh o interpretam como o ID do processo (PID). Para resolver essa limitação, você pode usar as seguintes alternativas:
Se ainda quiser especificar o bloco de script na linha de comando, você pode fazer o escape dos delimitadores
$$, como em\$\$.Você também pode colocar o bloco de script com os delimitadores padrão
$$em um arquivo separado e chamá-lo com o comandosnow sql -f <filename>.
Passagem de um bloco como uma cadeia de caracteres literal para EXECUTE IMMEDIATE¶
Se você estiver escrevendo um bloco anônimo, passe o bloco como uma cadeia de caracteres literal para o comando EXECUTE IMMEDIATE. Para delimitar a cadeia de caracteres literal, use aspas simples ou cifrões duplos.
Por exemplo:
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;
$$
;
Como alternativa, você pode definir uma variável de sessão que seja uma cadeia de caracteres literal contendo o bloco, e você pode passar essa variável de sessão para o comando EXECUTE IMMEDIATE. Por exemplo:
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;
Nota
Ao especificar o bloco de script diretamente na linha de comando Snowflake CLI, os delimitadores $$ podem não funcionar em alguns shells porque eles interpretam esse delimitador como outra coisa. Por exemplo, os shells bash e zsh o interpretam como o ID do processo (PID). Para resolver essa limitação, você pode usar as seguintes alternativas:
Se ainda quiser especificar o bloco de script na linha de comando, você pode fazer o escape dos delimitadores
$$, como em\$\$.Você também pode colocar o bloco de script com os delimitadores padrão
$$em um arquivo separado e chamá-lo com o comandosnow sql -f <filename>.