Подключение к базе данных Teradata с использованием библиотеки R + DBI + ODBC
Я пытаюсь подключиться к базе данных Teradata в R с помощью библиотеки DBI (если это имеет значение, я нахожусь на Windows). Я могу успешно подключиться с помощью библиотеки RODBC, поэтому я знаю, что мои учетные данные и т. Д. Верны.
Я подозреваю, что проблема заключается в:
- Я не правильно указываю механизм аутентификации
- Неправильный драйвер: вместо использования ODBC, возможно, мне следует использовать JDBC?
Фон:
Во-первых, вот моя информация ODBC, если я посмотрю на ODBC Database Source Administrator:
- Имя = имя_имя
- Driver = Teradata
- Имя или IP-адрес = адрес
- Механизм = ldap
- Имя пользователя = my_username
Использование R 3.5.1 (2018-07-02), RStudio, Windows 10.
Что работает:
library(RODBC)
con = odbcConnect(dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
Что я пробовал с DBI и не удается:
library(DBI)
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password"))
Ошибка: Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password")
,MechanismName = "ldap")
Ошибка: Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
Я видел эту ошибку в подобных ситуациях, когда механизм не указан правильно (ldap
), так что, может быть MechanismName
неправильно?
Я знаю, что могу сказать, что мне нравится в строке подключения, и никакой ошибки не возникает, так что если MechanismName
неверный способ указать механизм аутентификации. У меня не будет возвращенной ошибки. Например:
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password")
,MechanismName = "ldap")
,made_up_input = "I like cats"
выдает ошибку: Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
Заранее спасибо.
Изменить: есть идея использовать MechanismName
из вопроса, поднятого в Git
2 ответа
Как и R, DBI основан на C и говорит на ODBC. Если бы он был на основе Java, он бы говорил на JDBC.
Я бы посоветовал вам проверить с жестко закодированными UID и PWD перед использованием askForPassword
функция.
Тем не менее, я верю, что вы преуспеете с -
DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
Для тех, кто обнаружит это поздно, первоначальный вызов DBI будет работать только в том случае, если указано точное имя драйвера, которое отображается в вашем диспетчере ODBC. Откройте приложение «Администратор источника данных ODBC» и перейдите на вкладку «Драйверы». Введите имя драйвера точно так, как оно указано в столбце «Имя», и оно должно работать. Пример: «Драйвер ODBC базы данных Teradata 16.10» вместо «Teradata», как показано выше.