通过 SnowSQL 进行连接¶
本主题介绍如何通过手动输入连接参数来连接 Snowflake。本主题还介绍如何配置便于使用的默认连接,以及如何配置一个或多个“命名连接”,以使用备选连接设置或创建多个并发会话。
备注
Snowflake 不支持在同一台设备上同时运行多个 SnowSQL 实例。例如,您不能同时打开两个 MacOS 终端或 Linux Shell 应用程序,并在其中运行 snowsql
。
本主题内容:
连接语法¶
$ snowsql <connection_parameters>
其中 <connection_parameters>
是以下一个或多个参数。有关各个参数的详细说明,请参阅 连接参数参考 (本主题内容)。
参数 |
描述 |
---|---|
|
您的账户标识符。遵循 $SNOWSQL_ACCOUNT。 |
|
连接到 Snowflake 的用户名。遵循 $SNOWSQL_USER。 |
|
要使用的数据库。遵循 $SNOWSQL_DATABASE。 |
|
数据库中要使用的架构。遵循 $SNOWSQL_SCHEMA。 |
|
要使用的角色名称。遵循 $SNOWSQL_ROLE。 |
|
要使用的仓库。遵循 $SNOWSQL_WAREHOUSE。 |
|
连接的主机地址。遵循 $SNOWSQL_HOST。(已弃用) |
|
连接的端口号。遵循 $SNOWSQL_PORT。(已弃用) |
|
区域。遵循 $SNOWSQL_REGION。(已弃用;请改用 -a 或 --accountname) |
|
用于多重身份验证的令牌 (MFA) |
|
在密码末尾追加 MFA 密码。 |
|
如果客户端和服务器之间的连接丢失,则中止查询。默认情况下,即使连接丢失也不会中止。 |
|
测试与 Snowflake 的连接。该选项主要用于打印出 TLS (传输层安全)证书链。 |
|
(DEPRECATED。请使用 HTTPS_PROXY 和 HTTP_PROXY 环境变量。)代理服务器主机名。遵循 $SNOWSQL_PROXY_HOST。 |
|
(DEPRECATED。请使用 HTTPS_PROXY 和 HTTP_PROXY 环境变量。)代理服务器端口号。遵循 $SNOWSQL_PROXY_PORT。 |
|
(DEPRECATED。请使用 HTTPS_PROXY 和 HTTP_PROXY 环境变量。)代理服务器用户名。遵循 $SNOWSQL_PROXY_USER。设置用于代理服务器密码的 $SNOWSQL_PROXY_PWD。 |
|
身份验证器:'snowflake'、'externalbrowser'(使用任何 IdP 和 Web 浏览器)、https:/ (https:/)/<okta_account_name>.okta.com(原生地使用 Okta),或 'oauth'(使用 OAuth 进行身份验证)。 |
|
显示当前 SnowSQL 版本,或者使用特定版本(如果作为值提供)。 |
|
本次运行禁止自动升级。如果没有为 -v 指定版本,则使用 ~/.snowsql/ 中的最新版本。 |
|
设置要引用的变量,引用方式为 &<var>. -D tablename=CENUSTRACKONE 或 --variable db_key=$DB_KEY |
|
设置 SnowSQL 选项。请参阅 Snowflake 文档中的选项参考。 |
|
要执行的文件。 |
|
要执行的查询。 |
|
运行查询时使用的标签。默认情况下, |
|
SnowSQL 配置文件的路径和名称。默认为 ~/.snowsql/config。 |
|
强制显示 交互式密码提示,以允许您指定与 $SNOWSQL_PWD 环境变量中存储的密码不同的密码。 |
|
强制显示 MFA 的第二个令牌的提示。 |
|
要使用的连接参数命名集。 |
|
连接时禁用自动提交。将语句放入 BEGIN/COMMIT 内可将语句作为单个事务执行,并确保所有命令成功完成或不应用更改。 |
|
私钥文件的路径。 |
|
禁用连接池。 |
|
将 SnowSQL 强制升级到最新版本。 |
|
即使用户没有进行任何活动,也让会话无限期地处于活动状态。 |
|
显示以 SnowSQL 二进制打包的 Snowflake Connector for Python 软件的版本。 |
|
显示此消息并退出。 |
连接时指定密码¶
密码无法通过连接参数传递。必须通过以下方式之一指定密码:
通过 SnowSQL 中的 交互式提示 输入(仅适用于密码)。
在 SnowSQL 配置文件中使用
password
选项来定义。有关详细信息,请参阅 配置默认连接设置 (本主题内容)。使用
SNOWSQL_PWD
环境变量指定。有关详细信息,请参阅 使用环境变量 (本主题内容)。
备注
在 Windows 环境中,Cygwin 终端不会提示您输入账户标识符、用户名或密码。这是因为 SnowSQL 无法在 Cygwin 终端中启用 TTY 模式。
使用环境变量¶
目前,环境变量只能用于预先指定一些命令行参数值,例如密码、主机、数据库等。环境变量不可用于 SnowSQL 变量替换,除非启动 SnowSQL 时在命令行上使用 -D
或者 --variable
连接参数显式指定环境变量。例如:
- Linux/macOS:
$ snowsql ... -D tablename=CENUSTRACKONE --variable db_key=$DB_KEY
- Windows:
$ snowsql ... -D tablename=CENUSTRACKONE --variable db_key=%DB_KEY%
在上面的例子中,--variable
将名为 db_key
的 Snowflake 变量设置为 DB_KEY
环境变量。
配置默认连接设置¶
建议配置默认连接参数,以简化连接过程。此后,当连接到 Snowflake 时,可以省略 Snowflake 账户标识符、用户名和已配置为默认值的其他参数。
要配置默认设置,请执行以下步骤:
在文本编辑器中,打开 SnowSQL 配置文件 (名为
config
)。该文件的默认位置是:- Linux/macOS:
~/.snowsql/
- Windows:
%USERPROFILE%\.snowsql\
备注
启动 SnowSQL 时,可以指定
--config path
命令行标志来更改默认位置。
在
[connections]
部分中,从以下任何参数中移除注释符号并指定正确的值,以配置默认连接参数:[connections] #accountname = <string> # Account identifier to connect to Snowflake. #username = <string> # User name in the account. Optional. #password = <string> # User password. Optional. #dbname = <string> # Default database. Optional. #schemaname = <string> # Default schema. Optional. #warehousename = <string> # Default warehouse. Optional. #rolename = <string> # Default role. Optional. #authenticator = <string> # Authenticator: 'snowflake', 'externalbrowser' (to use any IdP and a web browser), https://<okta_account_name>.okta.com (to use Okta natively), 'oauth' to authenticate using OAuth.
注意
密码以明文形式存储在
config
文件中。您必须显式保护该文件,以限制访问。例如,在 Linux 或 macOS 中,可以运行chmod
,以设定只有您具有读取权限:$ chmod 700 ~/.snowsql/config
如果密码包含特殊字符,则必须将密码括在单引号或双引号内。
使用 SnowCD 验证与 Snowflake 的网络连接¶
配置完成后,您可以使用 SnowCD 评估与 Snowflake 的网络连接和排除其故障。
可以在初始配置过程中使用 SnowCD,也可以根据需要随时使用,以评估与 Snowflake 的网络连接并进行故障排除。
使用命名连接¶
要同时建立与 Snowflake 的多个连接,或者只是想存储多组不同的连接配置,您可以定义一个或多个 命名 连接。
在配置文件中定义命名连接¶
在文本编辑器中,打开
config
配置文件。默认情况下,该文件位于:- Linux/macOS:
~/.snowsql/
- Windows:
%USERPROFILE%\.snowsql\
为每个命名连接添加一个具有唯一名称的单独
[connections]
部分。例如,在下面可以看到,账户标识符 为
myorganization-myaccount
的 Snowflake 账户具有一个名为my_example_connection
的连接:[connections.my_example_connection] accountname = myorganization-myaccount username = jsmith password = xxxxxxxxxxxxxxxxxxxx dbname = mydb schemaname = public warehousename = mywh
使用命名连接来连接到 Snowflake¶
使用 -c <string>
(或者 --connection <string>
)连接参数来指定命名连接,其中 <string>
是在 配置文件 中定义的连接的名称。
例如,使用您在 在配置文件中定义命名连接 (本主题内容)中创建的 my_example_connection
连接进行连接:
$ snowsql -c my_example_connection
使用密钥对身份验证和密钥对轮换¶
SnowSQL 支持密钥对身份验证和密钥轮换。您可以使用未加密或已加密的密钥对。
小心
虽然支持未加密的私钥,但 Snowflake 强烈建议在连接到 Snowflake 时使用加密的私钥。如果未经授权的人能够访问未加密的私钥,则这些私钥无法防止未经授权的使用。
以下过程假定您使用推荐的加密密钥对身份验证:
首先,按照说明配置 密钥对身份验证和密钥对轮换。
在配置文件或命令行中指定私钥文件的路径:
在配置文件中:
将
private_key_path
连接参数添加到连接设置中,并指定您创建的私钥文件的本地路径。语法与 OS 无关:
- 支持的 OS:
private_key_path = <path>/rsa_key.p8使用
SNOWSQL_PRIVATE_KEY_PASSPHRASE
环境变量设置用于解密私钥文件的密码。请注意,对于 Linux 或 MacOS,密码无需放在引号内,但对于 Windows,必须使用单引号或双引号:
- Linux/macOS:
export SNOWSQL_PRIVATE_KEY_PASSPHRASE=<passphrase>- Windows:
set SNOWSQL_PRIVATE_KEY_PASSPHRASE='<passphrase>'在命令行上:
包含
private-key-path
连接参数,并指定加密私钥文件的路径:$ snowsql -a <account_identifier> -u <user> --private-key-path <path>/rsa_key.p8SnowSQL 会提示您输入密码。或者,使用
SNOWSQL_PRIVATE_KEY_PASSPHRASE
环境变量设置用于解密私钥文件的密码(如上所述)。
使用代理服务器¶
要使用代理服务器,请配置以下环境变量:
HTTP_PROXY
HTTPS_PROXY
NO_PROXY
例如:
- Linux/macOS:
export HTTP_PROXY='http://username:password@proxyserver.company.com:80' export HTTPS_PROXY='http://username:password@proxyserver.company.com:80'
- Windows:
set HTTP_PROXY=http://username:password@proxyserver.company.com:80 set HTTPS_PROXY=http://username:password@proxyserver.company.com:80
小技巧
Snowflake 不支持涉及拦截 HTTPS 代理的配置,这些代理提供除 Snowflake 颁发的证书之外的传输层安全 (TLS) 证书。避免此配置有助于减少潜在的安全风险,例如通过受破坏的代理进行的 MITM (中间人)攻击。
如果 必须 使用 TLS 代理,Snowflake 强烈建议更新服务器策略以通过 Snowflake 证书,这样在通信过程中就不会更改证书。
(可选)可以使用 NO_PROXY
绕过特定通信的代理。例如,可以通过指定 NO_PROXY=".amazonaws.com"
绕过 Amazon S3 访问。
使用 Web 浏览器进行联合身份验证/SSO¶
要将 基于浏览器的 SSO 身份验证 用于 SnowSQL,请将 --authenticator externalbrowser
添加到 SnowSQL 连接参数 中:
例如:
$ snowsql -a <account_identifier> -u <username> --authenticator externalbrowser
有关联合身份验证/SSO 的更多信息,请参阅 管理/使用联合身份验证。
验证 OCSP 连接器或驱动程序版本¶
在连接到 Snowflake 时,Snowflake 使用 OCSP 评估证书链。驱动程序或连接器版本及其配置都决定了 OCSP 行为。有关驱动程序或连接器版本及其配置和 OCSP 行为的更多信息,请参阅 OCSP 配置。
OCSP 响应缓存服务器¶
备注
SnowSQL 1.1.55 及更高版本目前支持 OCSP 响应缓存服务器。
Snowflake 客户端通过进行在实际传输数据之前建立安全连接的“握手”,启动与 Snowflake 服务端点的每个连接。作为握手的一部分,客户端会对服务端点的 TLS 证书进行身份验证。通过向 CA(证书颁发机构)的其中一个 OCSP(在线证书状态协议)服务器发送客户端证书请求,检查证书的撤销状态。
当 OCSP 服务器的响应出现超过合理时间的延迟时,连接会失败。以下缓存会保留撤销状态,这有助于缓解这些问题:
内存缓存,在进程的生命周期中保留该状态。
文件缓存,将该状态一直保留到缓存目录(例如
~/.cache/snowflake
或者~/.snowsql/ocsp_response_cache
)被清除。Snowflake OCSP 响应缓存服务器,它每小时提取一次来自 CA 的 OCSP 服务器的 OCSP 响应,并将这些响应存储 24 小时。然后,客户端可以从此服务器缓存中请求给定 Snowflake 证书的验证状态。
重要
如果服务器策略拒绝对大多数或所有外部 IP 地址和网站的访问,则 必须 将缓存服务器地址加入允许名单中,以允许正常的服务运行。缓存服务器主机名是
ocsp*.snowflakecomputing.cn:80
。如果因故需要禁用缓存服务器,请将
SF_OCSP_RESPONSE_CACHE_SERVER_ENABLED
环境变量设置为false
。请注意,该值区分大小写,并且 必须 为小写。
如果没有一个缓存层包含 OCSP 响应,则客户端会尝试直接从 CA 的 OCSP 服务器提取验证状态。
连接错误处理¶
Cannot open self /usr/bin/snowsql or archive /usr/bin/snowsql.pkg
(仅限 Linux)由于
pyinstaller
(该程序从 Python 源代码中将 SnowSQL 打包为独立的可执行文件)的限制,prelink
错误地去除了snowsql
可执行文件的某些部分,并导致了此错误。为了避免这个问题, SnowSQL 安装程序会尝试为
snowsql
可执行文件更新/etc/prelink.conf.d/snowsql.conf
中的prelink
配置文件,使得prelink
不会更改此文件。不幸的是,此配置更新不能由 SnowSQL 自动升级过程进行。请与系统管理员合作,在您的工作站上运行以下命令:
$ sudo bash -c "echo '-b snowsql' > /etc/prelink.conf.d/snowsql.conf"
备注
如果将 snowsql
安装在用户主目录中,此问题不太可能会发生,因为 prelink
默认配置为扫描共享的二进制目录(例如 /usr/bin
或者 /bin
),并且不会更改主目录中的程序。
连接参数参考¶
-a
、--accountname
¶
-u
、--username
¶
- 描述:
指定用于连接到指定账户的用户的登录名。
该连接参数也可以在 配置文件 中设置。
- 值:
字符串
值可以是环境变量:
- Linux/macOS:
$SNOWSQL_USER
- Windows:
%SNOWSQL_USER%
例如,在 Linux 或 macOS 中:
$ export SNOWSQL_USER=jdoe $ snowsql -u $SNOWSQL_USER- 默认值:
无
-d
、--dbname
¶
- 描述:
指定客户端会话中默认使用的数据库(登录后可以更改)。
- 值:
字符串
值可以是环境变量:
- Linux/macOS:
$SNOWSQL_DATABASE
- Windows:
%SNOWSQL_DATABASE%
该连接参数也可以在 配置文件 中设置。
- 默认值:
无
-s
、--schemaname
¶
- 描述:
指定客户端会话中默认使用的数据库架构(登录后可以更改)。
- 值:
字符串
值可以是环境变量:
- Linux/macOS:
$SNOWSQL_SCHEMA
- Windows:
%SNOWSQL_SCHEMA%
该连接参数也可以在 配置文件 中设置。
- 默认值:
无
-r
、--rolename
¶
- 描述:
指定客户端会话中默认用于访问 Snowflake 对象的角色(登录后可以更改)。
该连接参数也可以在 配置文件 中设置。
- 值:
字符串
值可以是环境变量:
- Linux/macOS:
$SNOWSQL_ROLE
- Windows:
%SNOWSQL_ROLE%
- 默认值:
无
-w
、--warehouse
¶
- 描述:
指定客户端会话中默认用于查询、加载等操作的虚拟仓库(登录后可以更改)。
该连接参数也可以在 配置文件 中设置。
- 值:
字符串
值可以是环境变量:
- Linux/macOS:
$SNOWSQL_WAREHOUSE
- Windows:
%SNOWSQL_WAREHOUSE%
- 默认值:
无
-h
, --host
– 已弃用¶
- 描述:
为向后兼容性/内部使用而提供
指定您在 Snowflake 中连接的主机的地址。
该参数不再使用,因为主机地址通过以下方式自动确定:将您使用
-a
或--account
指定的账户标识符与 Snowflake 域 (snowflakecomputing.cn
) 连接起来。- 值:
字符串
- 默认值:
无
-p
, --port
– 已弃用¶
- 描述:
为向后兼容性/内部使用而提供
指定用于连接的端口号。
该参数不再使用,因为 Snowflake 的端口号始终为
443
。- 值:
字符串
- 默认值:
无
--region
– 已弃用¶
- 描述:
为向后兼容性/内部使用而提供
指定账户所在 区域 的 ID。
该参数不再使用。有关更多详细信息,请参阅 -a、--accountname (本主题内容)。
- 值:
不适用
- 默认值:
不适用
-m
、--mfa-passcode
¶
- 描述:
指定 MFA(多重身份验证)的第二个令牌(如果您在命令行中传入密码)。
- 值:
字符串
- 默认值:
无
--mfa-passcode-in-password
¶
- 描述:
在密码末尾追加 MFA 密码。
您可以强制显示密码提示,并键入后跟 MFA 密码的密码。例如,如果 MFA 令牌是
123456
,并且密码是PASSWORD
:$ snowsql ... -P ... Password: PASSWORD123456- 值:
不适用(参数不带值)
- 默认值:
不适用
--abort-detached-query
¶
- 描述:
如果客户端和服务器之间的连接丢失,则中止查询。
- 值:
布尔
- 默认值:
False(即,如果连接丢失,活动的查询不会中止)
--probe-connection
¶
- 描述:
测试与 Snowflake 的连接并报告结果。请注意,这是一个试验性选项,主要用于打印出 TLS 证书链。
- 值:
不适用(参数不带值)
- 默认值:
不适用
--authenticator
¶
- 描述:
指定用于验证用户登录凭据的身份验证器。
- 值:
字符串(常量):
snowflake
使用内部 Snowflake 身份验证器。
externalbrowser
使用您的 Web 浏览器 与 Okta、 AD FS 或已为账户定义的其他兼容 SAML 2.0 的身份提供商 (IdP) 进行身份验证。
https://<okta_account_name>.okta.com
(即 Okta 的 URL 端点) 通过原生 Okta 进行身份验证 (仅当 IdP 是 Okta 时才受支持)。
oauth
使用 OAuth 进行身份验证。如果将 OAuth 指定为身份验证器,则还必须设置--token
参数来指定 OAuth 令牌(参阅下文)。有关更多信息,请参阅 管理/使用联合身份验证 和 客户端、驱动程序和连接器。
- 默认值:
snowflake
备注
仅在具有 Web 浏览器访问权限的终端窗口中,才支持
externalbrowser
身份验证器。例如,通过 SSH (安全外壳)会话访问的远程计算机上的终端窗口可能需要额外的设置才能打开 Web 浏览器。如果您无权访问 Web 浏览器,但 IdP 是 Okta,则可以使用原生 Okta(即将身份验证器设置为
https://<okta_account_name>.okta.com
)。
--token
¶
- 描述:
指定要用于身份验证的 OAuth 令牌。仅当您指定
--authenticator=oauth
后,才需要此参数。- 值:
字符串
- 默认值:
无
-v
、--version
¶
- 描述:
使用指定的 SnowSQL 版本,或者,如果未指定版本,则显示已安装的最新 SnowSQL 版本。
- 值:
字符串
- 默认值:
无
--versions
¶
- 描述:
列出可以安装并运行的所有 SnowSQL 可用版本。要安装列表中较早的 SnowSQL 版本,请使用
-v
选项并指定您要安装的版本。- 值:
不适用(参数不带值)
- 默认值:
不适用
--noup
¶
- 描述:
本次运行禁止自动升级。如果未包含此选项,并且有更新的版本可用, SnowSQL 会自动下载并安装新版本。下次运行 SnowSQL 时会使用新版本。
- 值:
不适用(参数不带值)
- 默认值:
不适用
-D
、--variable
¶
- 描述:
在命令行上定义 SnowSQL 变量。此选项可用于设置要在 Snowflake 中使用的特定变量。
- 值:
字符串
例如:
$ snowsql ... -D tablename=CENUSTRACKONE --variable db_key=$DB_KEY ...- 默认值:
无
-o
、--option
¶
- 描述:
在命令行上定义 SnowSQL 配置选项。这些选项将替换已在 SnowSQL 配置文件中设置的任何选项。有关可以设置/替换的选项的说明,请参阅 SnowSQL 配置选项参考。
- 值:
字符串
- 默认值:
无
-f
、--filename
¶
- 描述:
指定要以批处理模式执行的 SQL 文件。
值可以是文件名(如果需要,包含目录路径)或文件的 URL。
- 值:
字符串
- 默认值:
无
-q
、--query
¶
- 描述:
指定要执行的 SQL 查询。
值可以是单个 SQL 查询,或要执行的查询的列表(以分号分隔,例如
'select current_user(); select current_role()'
)。您还可以使用
;>
来分隔查询,以指定多个异步运行的查询。下面的例子启动 SnowSQL,并异步运行所有四个查询:
snowsql -o log_level=DEBUG -q "select * from SNOWSQLTABLE;> insert into table table1 values(2);> select 5;>select count(*) from testtable;"
- 值:
字符串
- 默认值:
无
--query_tag
¶
- 描述:
指定运行查询时使用的标签。
值可以是单个标签,或是以分号分隔的标签列表。
- 值:
字符串
- 默认值:
SNOWSQL_QUERY_TAG
环境变量的值。
--config
¶
- 描述:
指定 SnowSQL 配置文件的位置(即目录路径)。如果要从默认位置移动或复制配置文件,请包含此连接器参数。
- 值:
字符串
- 默认值:
特定于 OS:
- Linux/macOS:
~/.snowsql/
- Windows:
%USERPROFILE%\.snowsql\
-P
、--prompt
¶
- 描述:
强制显示交互式密码提示。
默认情况下, SnowSQL 使用存储在 $SNOWSQL_PWD 环境变量中的密码。使用此选项允许您替换在 $SNOWSQL_PWD 中定义的密码。
- 值:
不适用(参数不带值)
- 默认值:
不适用
-M
、--mfa-prompt
¶
- 描述:
强制显示 MFA 的第二个令牌的提示。或者,如果想在命令行中传入密码,则使用
--mfa-passcode <string>
。- 值:
不适用(参数不带值)
- 默认值:
不适用
-c
、--connection
¶
- 描述:
指定要使用的连接,其中指定的字符串是在 SnowSQL 配置文件中定义的连接的名称。有关更多详细信息,请参阅 使用命名连接 (本主题内容)。
- 值:
字符串
- 默认值:
无
--single-transaction
¶
- 描述:
结合
--filename
、--query
或标准输入命令使用时,此选项会将语句放入 BEGIN/COMMIT 内,以确保所有命令成功完成或不应用更改。- 值:
不适用(参数不带值)
- 默认值:
不适用
备注
请注意,如果输入命令使用 BEGIN、 COMMIT 或者 ROLLBACK,此选项将无法正常工作。此外,如果任何命令无法在事务块内执行,此选项将导致命令失败。
--private-key-path
¶
--disable-request-pooling
¶
- 描述:
默认情况下,SnowSQL 使用连接池。连接池通常可减少建立连接的滞后时间。但是,如果出现 DNS 问题,连接池可能会减慢将客户端故障转移到备选 DNS 的速度。该参数允许您关闭连接池。
该参数仅适用于启用了 复制 的客户。
- 值:
不适用(参数不带值)
- 默认值:
不适用
-U
、--upgrade
¶
- 描述:
如果本地目录中未下载最新版本,则强制将 SnowSQL 升级到最新版本。
- 值:
不适用(参数不带值)
- 默认值:
不适用
备注
需要 SnowSQL 1.1.63 或更新版本的引导程序可执行文件。可通过 UI 下载它。
-K
、--client-session-keep-alive
¶
- 描述:
即使用户没有进行任何活动,也让会话无限期地处于活动状态。
- 值:
不适用(参数不带值)
- 默认值:
不适用
--include_connector_version
¶
- 描述:
显示以 SnowSQL 二进制打包的 Snowflake Connector for Python 软件的版本。
- 值:
不适用(参数不带值)
- 默认值:
不适用
-?
、--help
¶
- 描述:
显示命令行快速使用指南。
- 值:
不适用(参数不带值)
- 默认值:
不适用