Usar o Snowflake Scripting no Snowflake CLI, SnowSQL, Classic Console e Python Connector¶
Este tópico explica como executar os exemplos do Snowflake Scripting em Snowflake CLI, SnowSQL, o Classic Console e o Python Connector.
Nota
Se você estiver usando outros clientes e interfaces (por exemplo, Snowsight ou o driver JDBC), você pode pular este tópico e consultar blocos do Script Snowflake.
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>
.