Como executar instruções SQL

Snowflake CLI permite que você execute consultas SQL, consultas ad-hoc ou arquivos contendo consultas SQL, usando o comando snow sql.

Para executar uma consulta ad-hoc, execute um comando semelhante ao seguinte:

snow sql -q "SELECT * FROM FOO"
Copy

Para executar um arquivo contendo uma consulta SQL, execute um comando semelhante ao seguinte:

snow sql -f my_query.sql
Copy

O comando snow sql pode executar várias instruções, caso em que vários conjuntos de resultados são retornados. Por exemplo, ao executar:

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

resulta na seguinte saída:

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

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

Para obter mais informações, consulte snow sql.

Como usar ariáveis para modelos SQL

Em certas situações, você pode querer mudar suas consultas SQL baseadas no contexto. O comando snow sql oferece suporte à substituição de variável do lado do cliente, o que permite que você use variáveis no comando que são resolvidas localmente antes de enviar a consulta. As variáveis na cadeia de caracteres SQL assumem o formato <% variable_name %> e a opção -D (ou --variable) especifica o valor da variável.

Nota

Atualmente, é possível usar a sintaxe SnowSQL &variable_name e <% variable_name %> para modelos. Entretanto, a Snowflake recomenda usar a sintaxe <% variable_name %>.

Por exemplo, para especificar um banco de dados usando uma variável do lado do cliente, você pode inserir um comando semelhante ao seguinte:

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

Quando executado, o comando substitui o valor dev na variável <% database %> para criar o nome de arquivo dev.logs e envia a consulta SQL select * from dev.logs ao Snowflake para processamento.

Você também pode especificar várias entradas variáveis, conforme mostrado:

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

Este exemplo gera a seguinte consulta SQL:

grant usage on database dev to eng_rl
Copy

Armazenamento de variáveis no arquivo de definição de projeto snowflake.yml

Especificar variáveis como opções de linha de comando snow sql pode não ser sempre prático, ou talvez você não queira especificar valores confidenciais na linha de comando. Nesses casos, você pode definir variáveis e valores no arquivo de definição de projeto snowflake.yml. Se for esse o caso, é possível simplesmente especificar os nomes da variável no formato <% ctx.env.<variable_name> %> em vez de usar a opção -D "<variável> = <valor>".

Usando o exemplo da seção anterior, você pode armazenar as variáveis de banco de dados e de função no arquivo snowflake.yml e alterar a consulta para:

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

Neste exemplo, o comando snow sql procura as definições de variável no arquivo de definição do projeto e extrai os valores sem torná-los visíveis na linha de comando. O arquivo snowflake.yml deve estar localizado no diretório de trabalho atual ou no local especificado com a opção -p.

Para obter mais informações sobre como armazenar esses valores no arquivo de definição do projeto, consulte Usos das variáveis em SQL.