Я пытаюсь автоматизировать некоторую конфигурацию, и как часть этого нам нужно добавить ODBC DSN через сценарий. Я пытаюсь использовать драйвер Cloudera Impala ODBC Connector, загруженный с Вот. Все машины, на которых это будет работать, будут работать под управлением Windows, большинство из них - Windows 8.1 или 10. Я протестировал все нижеприведенное на Windows 7 (где это возможно) и Windows 10 с теми же результатами. Я могу создать DSN на этом компьютере вручную, поэтому кажется, что драйвер установлен правильно. Я также пробовал все это как с пользовательскими, так и с системными DSN, но безуспешно.
В соответствии с Вот, есть три способа сделать это. Первый - это вмешательство напрямую в реестр, чего я бы по возможности избегал.
Второй - с помощью odbcconf. Проблема в том, что когда я запускаю команду ниже как в Windows 7, так и в Windows 10, появляется окно конфигурации для администратора ODBC, но ни одно из указанных мной значений не заполняется. Если я создаю DSN для SQL Server, это работает, однако, похоже, это зависит от драйвера. Я дважды проверил, что все настраиваю правильно, но даже имя не устанавливается. Смотрите на снимок экрана ниже, как это выглядит.
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"
Есть идеи, как решить любую из этих проблем, чтобы я мог двигаться дальше?
Так как никто не ответил на этот вопрос, я собираюсь продолжить и заполнить ниже то, чем я закончил, для таких людей, как @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"