执行 SQL 语句

Snowflake CLI 允许您使用 snow sql 命令执行 SQL 查询、临时查询或包含 SQL 查询的文件。

要执行临时查询,请运行类似下面的命令:

snow sql -q "SELECT * FROM FOO"
Copy

要执行包含 SQL 查询的文件,请运行类似下面的命令:

snow sql -f my_query.sql
Copy

snow sql 命令可以执行多个语句,在这种情况下,将返回多个结果集。例如,运行:

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

结果为以下输出:

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

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

有关更多信息,请参阅 snow sql 命令。

为 SQL 模板使用变量

在某些情况下,您可能需要根据上下文更改 SQL 查询。snow sql 命令支持客户端变量替换,允许您在提交查询之前在命令中使用在本地解析的变量。 变量在 SQL 字符串中采用形式 -<% variable_name %>, and the -D (or --variable) 选项指定变量的值。

备注

您当前可以使用 SnowSQL &variable_name<% variable_name %> syntax for templates. However, Snowflake recommends using the <% variable_name %> 语法。

例如,要使用客户端变量指定数据库,可以输入类似下面的命令:

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

执行时,该命令将替换 <% database %> 变量中的值 dev 以创建 dev.logs 文件名,然后将 select * from dev.logs SQL 查询发送到 Snowflake 进行处理。

您还可以指定多个变量输入,如下所示:

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

此示例生成以下 SQL 查询:

grant usage on database dev to eng_rl
Copy

snowflake.yml 项目定义文件中存储变量

将变量指定为 snow sql 命令行选项可能并不总是实用的,或者您可能不想在命令行中指定敏感值。在这种情况下,您可以在 snowflake.yml 项目定义文件中定义变量和值。然后您可以以 <% ctx.env.<variable_name> %> 形式指定变量名称,而不是使用 -D "<变量> = <value>" 选项。

使用上一部分的示例,您可以将数据库和角色变量存储在 snowflake.yml 文件中,并将查询更改为:

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

在此示例中,snow sql 命令用于在项目定义文件中查找变量定义,并提取值,而不在命令行上显示它们。snowflake.yml 文件应位于当前工作目录中,或位于使用 -p 选项指定的位置中。

有关在项目定义文件中存储这些值的更多信息,请参阅 在 SQL 中使用变量

语言: 中文