Я работаю на Mac, но у меня также есть виртуальная машина Windows.
Я пытаюсь подключиться к базе данных Teradata на моем Mac и Windows VM, используя R с библиотекой DBI (поэтому я могу использовать dbplyr).На моей виртуальной машине Windows все работает отлично (см. Мой предыдущий вопрос: Подключение к базе данных Teradata с использованием библиотеки R + DBI + ODBC ).
Снова я подозреваю, что проблема с драйвером, но я неконечно.Я уверен, что у меня была эта работа на прошлой неделе, но я не могу вспомнить.Я знаю, что обновил свой Mac.
Справочная информация. Сначала приведу информацию о ODBC, если я посмотрю ее. Администратор ODBC:
- Имя = имя_имя
- Driver = Teradata
- Имя или IP-адрес = address.here.ok
- Механизм = ldap
- Имя пользователя = my_username
См. Скриншотмой администратор ODBC и драйверы
Я загрузил драйвер ODBC для Mac с Teradata
Я использую версию R 3.5.1 (2018-07-02) и драйвер teradata 16.20.
Что работает (на Mac и Windows): библиотека (RODBC)
con = odbcConnect(dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
Что не работает на Mac(но работает в Windows)
con = DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
В Mac я получаю сообщение об ошибке Error: nanodbc/nanodbc.cpp:950: IM002: [unixODBC][Driver Manager]Data source name not found, and no default driver specified
.
Я также пробовал другие значения в строке подключения, но безуспешно, как описано здесь , например:
con = DBI::dbConnect(odbc::odbc()
,Driver = "Teradata"
,Host = "address.here.ok"
,DBName = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
Спасибо заранее.
Редактировать: обновить
Основываясь на предложениях @TallTed, я проверил два места, где DBI будет «искать» файл odbc.В каталоге
/usr/local/etc/
есть файлы odbc.ini
и odbcinst.ini
, но они полностью пусты /etc/
не имеют ни odbc.ini
, ни odbcinst.ini
Я также посмотрел, где @TallTed предложил библиотеку DBI:
/Users/*/Library/ODBC
имеет как odbc.ini
, так и odbcinst.ini
.odbc.ini
заполняется информацией, а odbcinst.ini
не имеет большого количества. /Library/ODBC/
имеет только odbcinst.ini
, который заполнен информацией, и пустую папку с именем ODBCDataSources
(не уверен, что естьтам есть скрытые файлы). /Users/*/.odbc.ini
существует ни с чем в нем, я не могу открыть /Users/*/.odbcinst.ini
Пока что в /usr/local/etc/
я удалил odbcinst.ini
и odbc.ini
и создали следующие символические ссылки:
- (ссылка на файл odbc.ini)
ln -s /Users/*/Library/ODBC/odbc.ini /usr/local/etc
- (ссылка на файл odbcinst.ini)
ln -s /Library/ODBC/odbcinst.ini /usr/local/etc
- (ссылка на папку ODBCDataSources)
ln -s /Library/ODBC/ODBCDataSources /usr/local/etc
Не удалось создать символические ссылки в папке /etc/
, например, я получил ошибку:
ln: /etc/odbc.ini: Permission denied
Теперь я получаю Error: nanodbc/nanodbc.cpp:950: HY000: [Teradata][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function.
Редактировать 2: решение
con = DBI::dbConnect(odbc::odbc()
,driver = "/Library/Application Support/teradata/client/16.20/lib/tdataodbc_sbu.dylib"
,DBCName = "address.goes.here"
,MechanismName = "ldap"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password"))
Путь /Library/Application Support/teradata/client/16.20/lib/tdataodbc_sbu.dylib
только отАдминистратор ODBC> вкладка «Драйверы»