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
Copy

实参

选项

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

    备注

    您当前可以使用 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();'
    
    Copy
    select current_version();
    +-------------------+
    | CURRENT_VERSION() |
    |-------------------|
    | 8.25.1            |
    +-------------------+
    
  • 下面的示例展示了如何使用客户端变量指定数据库:

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

    执行时,该命令将替换 <% 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
    
    Copy
  • 默认情况下,Snowflake CLI 会从输出中移除 SQL 查询中的注释。下面的示例使用 --retain-comments 选项将注释包含在查询结果中。

    假设 example.sql 文件包含以下语句和注释:

    select 'column1';
    -- My comment
    select 'column2';
    
    Copy

    执行以下命令时,-- My comment 会出现在查询结果中。

    snow sql -f example.sql
    
    Copy
    select 'column1';
    +-----------+
    | 'COLUMN1' |
    |-----------|
    | ABC       |
    +-----------+
    
    -- My comment
    select 'bar';
    +-----------+
    | 'COLUMN2' |
    |-----------|
    | 123       |
    +-----------+
    
    Copy
语言: 中文