Подключение к базе данных Teradata с использованием библиотеки R + DBI + ODBC - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь подключиться к базе данных Teradata в R, используя библиотеку DBI (если это имеет значение, я в Windows).Я могу успешно подключиться, используя библиотеку RODBC, поэтому я знаю, что мои учетные данные и т. Д. Верны.

Я подозреваю, что проблема:

  • Неправильно указан механизм аутентификации
  • Неверный драйвер: вместо использования ODBC, возможно, мне следует использовать JDBC?

Справочная информация:

Сначала вот моя информация ODBC, если я смотрю ее в базе данных ODBCАдминистратор источника:

  • Имя = имя_имя
  • Драйвер = Teradata
  • Имя или IP-адрес = address.here.ok
  • Механизм = ldap
  • Имя пользователя = my_username

Screenshot of

Использование 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

1 Ответ

0 голосов
/ 25 января 2019

Как и R, DBI основан на C и говорит на ODBC. Если бы он был на основе Java, он бы говорил на JDBC.

Я бы посоветовал вам провести тестирование с жестко заданными UID и PWD перед использованием функции askForPassword.

Тем не менее, я считаю, что у вас все получится -

DBI::dbConnect(odbc::odbc() 
    ,dsn = "name_name" 
    ,uid = rstudioapi::askForPassword("Username") 
    ,pwd = rstudioapi::askForPassword("Password")
   )
...