snow sql¶
执行 Snowflake 查询。 使用查询、文件名或输入选项。 可以使用查询选项、文件名选项(将执行文件中的所有查询)或使用其他命令的管道输出,通过 stdin 指定要执行的查询。例如 cat my.sql | snow sql -i
。 该命令支持在客户端发生的变量替换。
语法¶
snow sql
--query <query>
--filename <files>
--stdin
--variable <data_override>
--retain-comments
--project <project_definition>
--env <env_overrides>
--connection <connection>
--host <host>
--port <port>
--account <account>
--user <user>
--password <password>
--authenticator <authenticator>
--private-key-file <private_key_file>
--token-file-path <token_file_path>
--database <database>
--schema <schema>
--role <role>
--warehouse <warehouse>
--temporary-connection
--mfa-passcode <mfa_passcode>
--enable-diag
--diag-log-path <diag_log_path>
--diag-allowlist-path <diag_allowlist_path>
--format <format>
--verbose
--debug
--silent
实参¶
无
选项¶
--query, -q TEXT
要执行的查询。
--filename, -f FILE
要执行的文件。默认值:[]。
--stdin, -i
从标准输入读取查询。在管道输入此命令时使用它。默认值:False。
--variable, -D TEXT
key=value 格式的字符串。如果提供,SQL 内容将被视为模板并使用所提供的数据渲染。
--retain-comments
保留传递给 Snowflake 的查询中的注释。默认值:False。
-p, --project TEXT
Snowflake 项目所在的路径。默认为当前工作目录。
--env TEXT
key=value 格式的字符串。覆盖用于模板的 env 部分的变量。默认值:[]。
--connection, -c, --environment TEXT
连接名称,如您在
config.toml
文件中所定义。默认值:default
。--host TEXT
连接的主机地址。替换为连接指定的值。
--port INTEGER
连接的端口。替换为连接指定的值。
--account, --accountname TEXT
分配给 Snowflake 账户的名称。替换为连接指定的值。
--user, --username TEXT
连接到 Snowflake 的用户名。替换为连接指定的值。
--password TEXT
Snowflake 密码。替换为连接指定的值。
--authenticator TEXT
Snowflake 身份验证器。替换为连接指定的值。
--private-key-file, --private-key-path TEXT
Snowflake 私钥文件路径。替换为连接指定的值。
--token-file-path TEXT
连接到 Snowflake 时应使用的带有 OAuth 令牌的文件路径。
--database, --dbname TEXT
要使用的数据库。替换为连接指定的值。
--schema, --schemaname TEXT
要使用的数据库架构。替换为连接指定的值。
--role, --rolename TEXT
要使用的角色。替换为连接指定的值。
--warehouse TEXT
要使用的仓库。替换为连接指定的值。
--temporary-connection, -x
使用用命令行参数定义的连接,而不是在配置中定义的连接。默认值:False。
--mfa-passcode TEXT
用于多重身份验证的令牌 (MFA)。
--enable-diag
运行 Python 连接器诊断测试。默认值:False。
--diag-log-path TEXT
诊断报告路径。默认:<temporary_directory>。
--diag-allowlist-path TEXT
可选允许列表的诊断报告路径。
--format [TABLE|JSON]
指定输出格式。默认:TABLE。
--verbose, -v
显示日志级别
info
及更高级别的日志条目。默认值:False。--debug
显示日志级别
debug
及更高级别的日志条目;调试日志包含其他信息。默认值:False。--silent
关闭到控制台的中间输出。默认值:False。
--help
显示此命令的帮助文本。
使用说明¶
您可以使用以下选项之一指定要执行的 SQL 查询
使用
--query
选项指定查询字符串。使用
--filename
选项执行一个或多个包含 SQL 查询的文件。例如:snow sql -f myfile.sql
snow sql -f file1.sql -f file2.sql
将查询指定为
stdin
,并通过管道将其传送到snow sql
命令,如cat my.sql | snow sql
。如果您的查询包含不希望 shell 解释的特殊字符,例如 SYSTEM 函数 中的美元符号,则可以执行以下任一操作:
将查询放到单引号而不是双引号里,如:
snow sql -q 'SELECT SYSTEM$CLIENT_VERSION_INFO()'
转义特殊字符,如:
snow sql -q "SELECT SYSTEM\$CLIENT_VERSION_INFO()"
使用和
<% variable_name %>
placeholder in your SQL queries and a-D
命令行选项组合的变量来模板化 SQL 查询,格式为:snow sql -q "select * from my-database order by <% column_name %>" -D "column_name=Country"
备注
您当前可以使用 SnowSQL
&variable_name
和<% variable_name %>
syntax for templates. However, Snowflake recommends using the<% variable_name %>
语法。
示例¶
以下示例使用 SQL SYSTEM$CLIENT_VERSION_INFO 系统函数返回有关客户端和驱动程序的版本信息。
snow sql --query 'SELECT SYSTEM$CLIENT_VERSION_INFO();'
select current_version(); +-------------------+ | CURRENT_VERSION() | |-------------------| | 8.25.1 | +-------------------+
下面的示例展示了如何使用客户端变量指定数据库:
snow sql -q "select * from <% database %>.logs" -D "database=dev"
执行时,该命令将替换
<% database %>
变量中的值dev
以创建dev.logs
标识符,然后将select * from dev.logs
SQL 查询发送到 Snowflake 进行处理。备注
您当前可以使用 SnowSQL
&variable_name
和 &``{ variable_name }`` 语法作为模板。但是 Snowflake 建议使用<% variable_name %>
语法。此示例展示了如何使用
--env
选项传递环境变量:snow sql -q "select '<% ctx.env.test %>'" --env test=value_from_cli
默认情况下,Snowflake CLI 会从输出中移除 SQL 查询中的注释。下面的示例使用
--retain-comments
选项将注释包含在查询结果中。假设
example.sql
文件包含以下语句和注释:select 'column1'; -- My comment select 'column2';
执行以下命令时,
-- My comment
会出现在查询结果中。snow sql -f example.sql
select 'column1'; +-----------+ | 'COLUMN1' | |-----------| | ABC | +-----------+ -- My comment select 'bar'; +-----------+ | 'COLUMN2' | |-----------| | 123 | +-----------+