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:

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>'
Copy

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;
  $$
  ;
Copy

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 comando snow 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;
$$
;
Copy

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;
Copy

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 comando snow sql -f <filename>.