R-Studio - 与 Teradata 的连接不起作用



我在尝试将我的R工作室连接到Teradata时遇到了问题。它给了我

Error: nanodbc/nanodbc.cpp:983: 08001: [Teradata][WSock32 DLL] (439) WSA E HostUnreach: The Teradata server can't currently be reached over this network

但是,我能够从cmd登录到Teradata。

我的代码使用具有标准设置的 DBI 连接。

readRenviron("~/.Renviron")
databaseType <- "Teradata"
defaultDatabase <- "Test"
SERVER <- "tera2"
DATABASE <- "teradb"

driverList <- odbc::odbcListDrivers()
DRIVER <- as.character(subset(driverList, grepl(databaseType, driverList$name, ignore.case = TRUE))$name[1])
driverList <- odbc::odbcListDrivers()
DRIVER <- as.character(subset(driverList, grepl(databaseType, driverList$name, ignore.case = TRUE))$name[1])
queryData <- function(query) {
con <- openConnection()
queryDataRet <- data.frame(dbGetQuery(con, query))
dbDisconnect(con)
return(queryDataRet)
}

openConnection <- function() {
con <- dbConnect(odbc::odbc(), 
Driver = DRIVER,
Server = SERVER,
DBCName = DATABASE,
UID = Sys.getenv("tera_user"), 
PWD = Sys.getenv("tera_pass"))
#Note: passwords are stored in .Renviron
return(con)
}

testQuery <- function(){
query <- paste0 ("select * from test")
print(queryData(query))
}
testQuery()

当我更改密码或用户等任何内容时,它会给出错误,因此我认为我的代码是正确的,并且连接是在外部的某个地方引起的。 有什么想法吗?

对于 Teradata ODBC 驱动程序,DBCName= 是一个网络名称(对于其他驱动程序,通常以 Server= 的形式提供(。默认架构的关键字是数据库=。

尝试类似的东西

con <- dbConnect(odbc::odbc(), 
Driver = DRIVER,
DBCName = SERVER,
Database = defaultDatabase,
UID = Sys.getenv("tera_user"), 
PWD = Sys.getenv("tera_pass"))

似乎所有代码都是正确的,并且由于多个访问路由返回相同的错误,其他东西起作用。

好的,几个星期后我决定看看.Renviron 和我使用usethis::edit_r_environ()来确保所有细节都是正确的,并且它有效!感谢大家的支持。

最新更新