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"
Para executar um arquivo contendo uma consulta SQL, execute um comando semelhante ao seguinte:
snow sql -f my_query.sql
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';"
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"
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"
Este exemplo gera a seguinte consulta SQL:
grant usage on database dev to eng_rl
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 %>"
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.