我正在尝试自动化某些配置,其中我们需要通过脚本添加 ODBC DSN。我尝试使用的驱动程序是 Cloudera Impala ODBC Connector,可从以下网址下载这里。所有运行此程序的机器都将运行 Windows,其中大多数是 Windows 8.1 或 10。我在 Windows 7(如果可能)和 Windows 10 上测试了以下所有内容,结果相同。我可以手动在此机器上创建 DSN,因此驱动程序似乎安装正确。我还尝试了所有这些方法,包括用户 DSN 和系统 DSN,但都没有成功。
根据这里,有三种方法可以做到这一点。第一种是直接修改注册表,如果可能的话,我希望避免这种情况。
第二种方法是使用 odbcconf。问题是,当我在 Windows 7 和 Windows 10 上运行下面的命令时,它会弹出一个 ODBC 管理员的配置窗口,但我指定的值都没有填写。但是,如果我为 SQL Server 创建 DSN,这确实有效,因此它似乎是特定于驱动程序的。我仔细检查了设置是否正确,但甚至连名称都没有设置。请参见下面的屏幕截图以了解它的样子。
odbcconf CONFIGSYSDSN "Cloudera ODBC Driver for Impala" "DSN=Testing|Server=server"
第三种方法是使用 Powershell CmdLet,Add-OdbcDsn。当我为 SQL Server 或 Cloudera Impala 运行以下命令时,它只是挂起,甚至 10 分钟后也没有返回。Powershell 的资源使用量基本上为 0,而且我没有看到系统上有任何活动。ODBC 管理器中没有显示 DSN。
Add-OdbcDsn -Name "testing" -Driver "SQL Server" -DsnType "System"
关于如何解决这些问题以便我可以继续前进,有什么想法吗?
答案1
因此,由于没有人回答这个问题,我将继续填写我最终在下面所做的事情,以便为可能正在寻找类似答案的人(例如@gimpy)提供帮助。
我最终只是通过注册表项的途径,运行 .reg 文件来添加正确的 ODBC 信息。请参阅下面的示例,其中说明了我为实现此目的在 .reg 文件中输入的内容。
我将把这个答案标记为解决方案,直到/如果有人能够给我上述另外两种方法之一的答案,我会认为这更可取。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]
"Non-Prod Impala Connection"="Cloudera ODBC Driver for Impala"
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\Non-Prod Impala Connection]
"AllowHostNameCNMismatch"="1"
"AllowSelfSignedServerCert"="1"
"AsyncExecPollInterval"="10"
"AuthMech"="1"
"AutoReconnect"="1"
"CheckCertRevocation"="1"
"DelegateKrbCreds"="1"
"DelegationUID"=""
"DESCRIPTION"=""
"Driver"="Cloudera ODBC Driver for Impala"
"EnableSimulatedTransactions"=0
"Host"="<ImpalaHost>"
"KrbFQDN"="_HOST"
"KrbRealm"="<Domain>"
"KrbServiceName"="impala"
"LCaseSspKeyName"=""
"Port"="21050"
"RowsFetchedPerBlock"="10000"
"Schema"="<Database>"
"ServicePrincipalCanonicalization"="1"
"SocketTimeout"="30"
"SSL"="1"
"StringColumnLength"="32767"
"TrustedCerts"="<CertificatePath>\rootca.cert.pem"
"TSaslTransportBufSize"="1000"
"UID"=""
"UseKeytab"="0"
"UseNativeQuery"="0"
"UseOnlySSPI"="0"
"UseSASL"="1"
"UseSQLUnicodeTypes"="0"
"UseSystemTrustStore"="1"