使用 R + DBI 库 + ODBC 连接到 Teradata 数据库
Connect to Teradata Database using R + DBI library + ODBC
我正在尝试使用 DBI 库连接到 R 中的 Teradata 数据库(如果重要的话我在 Windows)。我可以使用 RODBC 库成功连接,所以我知道我的凭据等是正确的。
我怀疑问题是:
- 我没有正确指定身份验证机制
- 错误的驱动程序:不使用 ODBC,也许我应该使用 JDBC?
背景:
首先,这是我的 ODBC 信息,如果我在 ODBC 数据库源管理员那里查看的话:
- 姓名=name_name
- 驱动程序 = Teradata
- 名称或 IP 地址 = address.here.ok
- 机制 = 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
from an issue raised in Git
与 R 一样,DBI 也是基于 C 的并且使用 ODBC。如果它基于 Java,它会说 JDBC。
我建议您在使用 askForPassword
函数之前使用硬编码的 UID 和 PWD 进行测试。
也就是说,我相信你会成功 --
DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
对于那些晚发现的人来说,只有提供了在您的 ODBC 管理器中显示的驱动程序的确切名称,原始 DBI 调用才会起作用。打开 ODBC Data Source Administrator 应用程序并单击“驱动程序”选项卡。完全按照名称列中显示的名称输入驱动程序名称,它应该可以工作。例如,'Teradata Database ODBC Driver 16.10' 而不是上面显示的 'Teradata'。
我正在尝试使用 DBI 库连接到 R 中的 Teradata 数据库(如果重要的话我在 Windows)。我可以使用 RODBC 库成功连接,所以我知道我的凭据等是正确的。
我怀疑问题是:
- 我没有正确指定身份验证机制
- 错误的驱动程序:不使用 ODBC,也许我应该使用 JDBC?
背景:
首先,这是我的 ODBC 信息,如果我在 ODBC 数据库源管理员那里查看的话:
- 姓名=name_name
- 驱动程序 = Teradata
- 名称或 IP 地址 = address.here.ok
- 机制 = 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
from an issue raised in Git
与 R 一样,DBI 也是基于 C 的并且使用 ODBC。如果它基于 Java,它会说 JDBC。
我建议您在使用 askForPassword
函数之前使用硬编码的 UID 和 PWD 进行测试。
也就是说,我相信你会成功 --
DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
对于那些晚发现的人来说,只有提供了在您的 ODBC 管理器中显示的驱动程序的确切名称,原始 DBI 调用才会起作用。打开 ODBC Data Source Administrator 应用程序并单击“驱动程序”选项卡。完全按照名称列中显示的名称输入驱动程序名称,它应该可以工作。例如,'Teradata Database ODBC Driver 16.10' 而不是上面显示的 'Teradata'。