安装和配置适用于 Linux 的 ODBC 驱动程序¶
Linux 利用命名数据源 (DSNs) 将基于 ODBC 的客户端应用程序连接到 Snowflake。您可以选择使用 Snowflake Client Repository 中提供的 TGZ 文件、RPM 包或 DEB 包安装 ODBC 驱动程序。
本主题内容:
先决条件¶
操作系统¶
有关 Snowflake 客户端支持的操作系统列表,请参阅 操作系统支持。
从 ODBC 3.0.1 版开始,该驱动程序不再支持 CentOS 6 版本。
驱动程序管理器:iODBC 或 unixODBC¶
需要一个驱动程序管理器来管理 Snowflake 和 ODBC 驱动程序之间的通信。驱动程序支持使用 iODBC 或 unixODBC 作为驱动程序管理器。
iODBC¶
如果 CentOS 上未安装 iODBC,请以 sudo
身份执行以下命令:
$ yum install libiodbc
unixODBC¶
unixODBC 提供 odbcinst
和 isql
命令行实用程序,用于安装、配置和测试驱动程序。要验证 unixODBC 是否已安装,请执行以下命令:
$ which odbcinst $ which isql
如果未安装 unixODBC :
以
sudo
身份执行以下命令:$ yum search unixODBC $ yum install unixODBC.x86_64
验证
odbcinst
预计odbcinst.ini
和odbc.ini
文件所在的目录:$ odbcinst -j
位置应为
/etc
。
第 1 步:验证包签名(仅限 RPM 或 DEB)– 可选。¶
备注
如果使用 yum
或 TGZ 文件 安装 ODBC 驱动程序,请跳过此步骤。
如果使用 RPM 或 DEB 包安装 ODBC 驱动程序,并希望在安装前验证包签名,请执行以下任务:
1.1:下载并导入最新的 Snowflake 公钥¶
从公钥服务器中,下载并导入正在使用的 ODBC 驱动程序版本的 Snowflake GPG 公钥:
对于版本 2.25.6 及更高版本:
$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
对于版本 2.22.1 至 2.25.5:
$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
对于版本 2.18.2 至 2.22.0:
$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
对于版本 2.18.1 及更低版本:
$ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 93DB296A69BE019A
备注
如果此命令失败并出现以下错误:
gpg: keyserver receive failed: Server indicated a failure
然后指定您要将端口 80 用于密钥服务器:
gpg --keyserver hkp://keyserver.ubuntu.com:80 ...
1.2:下载 RPM 或 DEB 驱动程序包¶
从 Snowflake Client Repository 下载包。有关详细信息,请参阅 下载 ODBC 驱动程序。
1.3:验证 RPM 或 DEB 驱动程序包的签名¶
RPM 包签名¶
验证已成功导入密钥:
$ gpg --list-keys
该命令应显示 Snowflake 密钥。
验证签名:
$ rpm -K snowflake-odbc-<version>.x86_64.rpm
备注
如果
rpm
没有导入的 GPG 密钥,命令会报告签名状态不为 OK,并发出NOKEY
警告:$ rpm -K snowflake-odbc-<version>.x86_64.rpm snowflake-odbc-<version>.x86_64.rpm: digests SIGNATURES NOT OK $ rpm -Kv snowflake-odbc-<version>.x86_64.rpm snowflake-odbc-<version>.rpm: Header V4 RSA/SHA1 Signature, key ID 98cb005c: NOKEY Header SHA1 digest: OK V4 RSA/SHA1 Signature, key ID 98cb005c: NOKEY MD5 digest: OK
如果出现这种情况,请运行以下命令导出 GPG 密钥,将密钥导入
rpm
,然后再次验证签名:$ gpg --export -a <GPG_KEY_ID> > odbc-signing-key.asc $ sudo rpm --import odbc-signing-key.asc $ rpm -K snowflake-odbc-<version>.x86_64.rpm
其中
<GPG_KEY_ID>
是您在 1.1:下载并导入最新的 Snowflake 公钥 中安装的密钥的 ID。
DEB 包签名¶
安装包签名验证工具:
$ sudo apt-get install debsig-verify
将公钥导入 keyring:
$ mkdir /usr/share/debsig/keyrings/<GPG_KEY_ID> $ gpg --export <GPG_KEY_ID> > snowflakeKey.asc $ touch /usr/share/debsig/keyrings/<GPG_KEY_ID>/debsig.gpg $ gpg --no-default-keyring --keyring /usr/share/debsig/keyrings/<GPG_KEY_ID>/debsig.gpg --import snowflakeKey.asc
其中
<GPG_KEY_ID>
是您在 1.1:下载并导入最新的 Snowflake 公钥 中安装的密钥的 ID。为密钥配置策略。有关详细信息,请参阅
/usr/share/doc/debsig-verify
。策略必须存储在以下目录中:/etc/debsig/policies/<GPG_KEY_ID>
其中
<GPG_KEY_ID>
是您在 1.1:下载并导入最新的 Snowflake 公钥 中安装的密钥的 ID。将策略存储在名为
policy_name.pol
的文件中,其中policy_name
是策略名称。策略名称可以使用任何文本字符串,但字符串中不能包含空格。下面是 ID 为 630D9F3CAB551AF3 的密钥策略文件示例:
<?xml version="1.0"?> <!DOCTYPE Policy SYSTEM "http://www.debian.org/debsig/1.0/policy.dtd"> <Policy xmlns="https://www.debian.org/debsig/1.0/"> <Origin Name="Snowflake Computing" id="630D9F3CAB551AF3" Description="Snowflake ODBC Driver DEB package"/> <Selection> <Required Type="origin" File="debsig.gpg" id="630D9F3CAB551AF3"/> </Selection> <Verification MinOptional="0"> <Required Type="origin" File="debsig.gpg" id="630D9F3CAB551AF3"/> </Verification> </Policy>
验证签名:
$ sudo debsig-verify snowflake-odbc-<version>.x86_64.deb
备注
默认情况下,dpkg 包签名验证工具不会在安装包时检查签名。如果希望每次运行 dpkg 时都验证签名,请移除 /etc/dpkg/dpkg.cfg
文件中的 --no-debsig
行。
1.4:删除旧的 Snowflake 公钥 – 可选¶
您的本地环境可以包含多个 GPG 密钥;然而,出于安全原因,Snowflake 会定期轮换 GPG 公钥。作为最佳实践,我们建议在确认最新密钥适用于最新签名的包后删除现有公钥。
要删除密钥,请执行以下命令:
$ gpg --delete-key "Snowflake Computing"
第 2 步:安装 ODBC 驱动程序¶
使用以下方法之一安装驱动程序:
使用 yum 下载并安装驱动程序¶
如果使用 2.21.1 版 ODBC 驱动程序(及更高版本),则可以使用 yum
下载并安装驱动程序。
要使用 yum
下载并安装适用于 Linux 的 Snowflake ODBC 驱动程序,请执行以下操作:
创建名为
/etc/yum.repos.d/snowflake-odbc.repo
的文件,并在该文件中添加以下文本:[snowflake-odbc] name=snowflake-odbc baseurl=https://sfc-repo.snowflakecomputing.cn/odbc/linux/<VERSION_NUMBER>/ gpgkey=https://sfc-repo.snowflakecomputing.cn/odbc/Snowkey-<GPG_KEY_ID>-gpg
其中
VERSION_NUMBER
是驱动程序的具体版本号(例如 3.3.1),GPG_KEY_ID
是以下密钥 IDs 之一:ODBC 驱动程序版本
GPG 密钥 ID
2.22.1 及更高版本
630D9F3CAB551AF3
在上述设置中,
baseurl
和gpgkey
指向 Amazon S3 上的 Snowflake Client Repository。如果要使用 Azure BLOB 上的镜像,请将主机名更改为https://sfc-repo.azure.snowflakecomputing.cn/
:[snowflake-odbc] name=snowflake-odbc baseurl=https://sfc-repo.azure.snowflakecomputing.cn/odbc/linux/<VERSION_NUMBER>/ gpgkey=https://sfc-repo.azure.snowflakecomputing.cn/odbc/Snowkey-<GPG_KEY_ID>-gpg
运行以下命令安装驱动程序:
yum install snowflake-odbc
安装 TGZ 文件¶
使用 之前下载的 TGZ 文件 安装适用于 Linux 的 Snowflake ODBC 驱动程序。
将下载的文件 (
snowflake_linux_x8664_odbc-version.tgz
) 复制到工作目录。解压文件:
$ gunzip snowflake_linux_x8664_odbc-<version>.tgz
从 .tar 文件中提取文件:
$ tar -xvf snowflake_linux_x8664_odbc-<version>.tar
将生成的
snowflake_odbc
文件夹复制到要安装驱动程序的目录下。记下该目录。在稍后的说明中,您将需要这个位置。
安装 RPM 包¶
备注
RPM 包需要使用 unixODBC 作为驱动程序管理器。
要使用 先前下载的 RPM 包 安装适用于 Linux 的 Snowflake ODBC 驱动程序,可 选择验证包签名,然后运行以下命令:
$ yum install snowflake-odbc-<version>.x86_64.rpm
备注
安装目录为 /usr/lib64/snowflake/odbc/
。在稍后的说明中,您将需要这个位置。
如果驱动程序找不到该库,则会显示 Unable to locate SQLGetPrivateProfileString function
错误。在这种情况下,必须在 simba.snowflake.ini
配置文件中使用系统中驱动程序管理器的名称手动设置 ODBCInstLib=<driver_manager_path>
。有关更多信息,请参阅 配置 ODBC 驱动程序。
例如 ODBCInstLib=/usr/lib/x86_64-linux-gnu/libodbcinst.so.2
。
安装 DEB 包¶
备注
DEB 包需要使用 unixODBC 作为驱动程序管理器。
要使用 先前下载的 DEB 包 安装适用于 Linux 的 Snowflake ODBC 驱动程序,可 选择验证包签名,然后运行以下命令:
$ sudo dpkg -i snowflake-odbc-<version>.x86_64.deb
如果未安装包管理器所需的任何依赖项,该命令可能会失败。如果出现这种情况,请立即安装:
$ sudo apt-get install -f
备注
安装目录为 /usr/lib/snowflake/odbc/
。在稍后的说明中,您将需要这个位置。
第 3 步:配置环境(仅限 TGZ)¶
备注
如果使用 RPM 或 DEB 包文件安装了 ODBC 驱动程序,请跳过此步骤。
如果使用 TGZ 文件安装,请使用安装的驱动程序管理器(iODBC 或 unixODBC)配置环境。
使用 iODBC 进行配置¶
在终端窗口中,切换到 snowflake_odbc
目录,运行以下命令安装 Snowflake ODBC:
$ ./iodbc_setup.sh
该脚本完成以下步骤:
在系统级
/etc/odbc.ini
文件中添加一个 Snowflake 连接。在系统级
/etc/odbcinst.ini
文件中添加 Snowflake 驱动程序信息。在系统级
simba.snowflake.ini
文件中添加 Snowflake ODBC 驱动程序所需的所有证书授权 (CA) 证书。
运行 iodbc_setup.sh
时,无需设置任何环境变量。
另外,如果不想让 Snowflake 更改系统配置,可在 shell 配置文件(例如 .profile
、.bash_profile
)中添加以下环境变量:
ODBCINI = <path>/conf/odbc.ini
ODBCINSTINI = <path>/conf/odbcinst.ini
其中 path
是 snowflake_odbc
目录的位置。如果您已在系统中配置了其他 ODBC 驱动程序,并计划在下一步中将 Snowflake ODBC 条目添加到现有的 odbc.ini
和 odbcinst.ini
文件中,则应将 ODBCINI 和 ODBCINSTINI 指向这些文件的位置。
使用 unixODBC 进行配置¶
在终端窗口中,切换到 snowflake_odbc
目录,运行以下命令安装 Snowflake ODBC:
$ ./unixodbc_setup.sh
该脚本完成以下步骤:
在系统级
/etc/odbc.ini
文件中添加 Snowflake 连接。在系统级
/etc/odbcinst.ini
文件中添加 Snowflake 驱动程序信息。在系统级
simba.snowflake.ini
文件中添加 Snowflake ODBC 驱动程序所需的所有证书授权 (CA) 证书。
运行 unixodbc_setup.sh
时,无需设置任何环境变量。
另外,如果不想让 Snowflake 更改系统配置,可在 shell 配置文件(例如 .profile
、.bash_profile
)中添加以下环境变量:
ODBCSYSINI = <path>/conf/
其中 path
是 snowflake_odbc
目录的位置。如果您已在系统中配置了其他 ODBC 驱动程序,并计划在下一步中将 Snowflake ODBC 条目添加到现有的 odbc.ini
和 odbcinst.ini
文件中,则请将 ODBCSYSINI 指向这些文件的位置。
第 4 步:配置 ODBC 驱动程序¶
配置 ODBC 驱动程序需要在以下文件中添加条目:
<path>/lib/simba.snowflake.ini
/etc/odbcinst.ini
(或者<path>/conf/odbc.ini
,如果使用环境变量)/etc/odbc.ini
(或者<path>/conf/odbcinst.ini
,如果使用环境变量)
其中 path
是 snowflake_odbc
目录的位置。
4.1:simba.snowflake.ini
文件(驱动程序管理器和日志)¶
在 simba.snowflake.ini
文件中添加以下条目:
ErrorMessagesPath=<path>/ErrorMessages/ LogPath=/tmp/ ODBCInstLib=<driver_manager_path> CABundleFile=<path>/lib/cacert.pem ANSIENCODING=UTF-8
其中:
path
是snowflake_odbc
目录的位置。
driver_manager_path
是驱动程序管理器目录的位置:
iODBC:
ODBCInstLib=libiodbcinst.so.2
unixODBC:
ODBCInstLib=libodbcinst.so
备注
如果
LD_LIBRARY_PATH
环境变量中不包含驱动程序管理器目录,请在此处指定驱动程序管理器库的完整路径。
确认您在日志路径上有写入权限。
ANSIENCODING
参数指定应用程序的字符编码。默认为 UTF-8
。该参数仅供 Snowflake 使用,客户不应更改其值。
4.2:odbcinst.ini
文件(驱动程序注册)¶
在 odbcinst.ini
文件中添加以下条目:
[ODBC Drivers] SnowflakeDSIIDriver=Installed [SnowflakeDSIIDriver] APILevel=1 ConnectFunctions=YYY Description=Snowflake DSII Driver=/<path>/lib/libSnowflake.so DriverODBCVer=03.52 SQLLevel=1
其中 path
是 snowflake_odbc
目录的位置。
4.3:odbc.ini
文件(DSN 条目)¶
对于 每个 DSN,在 odbc.ini
文件中添加以下条目:
DSN 名称和驱动程序名称 (SnowflakeDSIIDriver),格式为
<dsn_name> = <driver_name>
。参数:
必需的连接参数,例如
server
。任何其他可选参数,例如默认的
role
、database
和warehouse
。
参数指定形式为
<parameter_name> = <value>
。有关可为每个 DSN 设置的参数的详细信息,请参阅 ODBC 配置和连接参数。
以下示例说明了一个 odbc.ini
文件,该文件配置两个数据源,这两个数据源在 server
URL 中使用不同形式的 账户标识符:
testodbc1
使用一个使用 账户标识符 的账户标识符,该账户标识符在组织myorganization
中指定账户myaccount
。testodbc2
使用 账户定位器xy12345
作为账户标识符。请注意,
testodbc2
使用 AWS US 西部(俄勒冈)区域中的账户。如果账户位于不同的区域,或者账户使用不同的云提供商,则需要 在账户定位器之后指定其他分段。[ODBC Data Sources] testodbc1 = SnowflakeDSIIDriver testodbc2 = SnowflakeDSIIDriver [testodbc1] Driver = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so Description = server = myorganization-myaccount.snowflakecomputing.cn role = sysadmin [testodbc2] Driver = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so Description = server = xy12345.snowflakecomputing.cn role = analyst database = sales warehouse = analysis
请注意以下事项:
testodbc1
和testodbc2
都有默认角色。testodbc2
还有默认的数据库和仓库。
第 5 步:测试 ODBC 驱动程序¶
使用已安装的驱动程序管理器( iODBC 或 unixODBC)测试驱动程序。
使用 iODBC 进行测试¶
测试您创建的 DSNs。在命令行中,使用以下格式指定 DSN 名称、用户登录名和密码:
iodbctest "DSN=<dsn_name>;UID=<user_name>;PWD=<password>"
例如:
$ iodbctest "DSN=testodbc2;UID=mary;PWD=password" iODBC Demonstration program This program shows an interactive SQL processor Driver Manager: 03.52.0709.0909 Driver: 2.12.70 (Snowflake) SQL>
使用 unixODBC 进行测试¶
使用 unixODBC
提供的 isql
命令行实用程序测试您创建的 DSNs。
在命令行中指定 DSN 名称、用户登录名和密码。
例如:
$ isql -v testodbc2 mary <password> Dec 14 22:57:50 INFO 2022078208 Driver::LogVersions: SDK Version: 09.04.09.1013 Dec 14 22:57:50 INFO 2022078208 Driver::LogVersions: DSII Version: 2.12.36 Dec 14 22:57:50 INFO 2022078208 SFConnection::connect: Tracing level: 4 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>