2017-03-23 231 views
1

我对着尝试通过RODBC至R连接到Teradata的问题。R可以不通过RODBC连接到工作Teradat ODBC连接

我的系统:Ubuntu的14.04; Teradata 14.10; ODBC驱动程序16.0; R 3.3.3; RStudio 1.0.136

我已经测试过的ODBC驱动程序,并且已安装并工作正常(我测试通过SQL连接到Teradata的,使用/ tdxodbc64)。我可以运行查询没有问题。

但是,当我试图通过做同样的R:

library('RODBC') 
channel <- odbcConnect(dsn="MY_DSN_NAME",uid="MY_USER",pwd="MY_PASS") 

我得到这个:

Warning messages: 
1: In RODBC::odbcDriverConnect("DSN=MY_DSN_NAME;UID=MY_USER;PWD=MY_PASS", : 
[RODBC] ERROR: state tU, code 0, message �������������������� 
2: In RODBC::odbcDriverConnect("DSN=MY_DSN_NAME;UID=MY_USER;PWD=MY_PASS", : 
ODBC connection failed 

如果我检查R中提供的数据源,我得到这样的信息:

odbcDataSources() 
LADW_V01    testdsn 
"Teradata ODBC Driver"    "tdata.so" 

任何建议将真的很好! 在此先感谢。

回答

0

这是我用来连接到我的Teradata数据仓库。 即使在RMarkdown下也能正常工作,并且不需要硬编码密码。 取而代之,它需要Windows数据库管理员的凭据。

注:下面的代码是* .Rmd文件

```{R} 
# Unfortunately, odbc is not on CRAN yet 
# So we will need devtools 
# install.packages(devtools) 
devtools::install_github("rstats-db/odbc") 

# Get connection info from Windows ODBC Data Source Administrator 
# Using the name you set manually 
con <- dbConnect(odbc::odbc(), 'Your_Data_Warehouse_Name') 
``` 

```{sql connection = con, output.var = result} 
-- This is sql code, comments need to be marked accordingly 
SELECT TOP 10 * FROM My_Table 
``` 

```{R} 
# And the result is available in the next chunk! 
result 
```` 

更新:我注意到你正在运行Linux操作系统。我还没有在我的Linux虚拟机上设置它,所以我不能从经验中说出。但是,包作者给出了在Linux系统上的等效方法如下information

的MacOS/Linux的

在MacOS和Linux有需要被 编辑两个单独的文本文件。 UnixODBC包含一个命令行可执行文件odbcinst,其中 可用于查询和修改DSN文件。但是,如果需要,这些文本文件也是纯手工编辑的。

有用于设置DSN信息的两个不同的文件。 - ODBCINST.INI - 其限定驱动程序选项 - ODBC.INI - 这在/etc/odbc.ini限定 连接选项

DSN配置文件可以用于 所有用户系统全局定义的,经常或/ opt/local/etc/odbc.ini, 确切位置取决于在编译 unixODBC时使用了什么选项。 odbcinst -j可用于查找确切位置。 或者,可以使用ODBCSYSINI环境变量来指定 配置文件的位置。防爆。 ODBCSYSINI =〜/ ODBC

本地DSN文件也可以用文件〜/ .odbc.ini的和 〜/ .odbcinst.ini使用。

ODBCINST。ini

包含驱动程序信息,特别是驱动程序的名称 库。可以在同一个文件中指定多个驱动程序。

[PostgreSQL的驱动程序]驱动器= /usr/local/lib/psqlodbcw.so

[SQLite的驱动程序]驱动器= /usr/local/lib/libsqlite3odbc.dylib ODBC.INI

包含连接信息,特别是用户名,密码, 数据库和主机信息。 Driver行对应于odbcinst.ini中定义的 驱动程序。

[PostgreSQL的]驱动器= PostgreSQL的驱动程序数据库
= TEST_DB服务器名=本地主机用户名= postgres的密码=密码端口= 5432

[SQLite的]驱动器= SQLite的驱动程序数据库=/TMP /测试参见 也:的unixODBC没有GUI的更多信息和例子。

+0

谢谢,但我想问题是在其他地方,因为我可以在ubuntu shell中成功连接到Teradata,但不能与R/RBC或Python无关......即使我在Rstudio中打开ubuntu shell,没有问题,但没有与R. – COLO

+0

是的,所以我说的是使用'rstats-db/odbc'包而不是'RODBC'包:) – JanLauGe

+0

这里是另一种方法,如果你想坚持使用RODBC:'library (RODBC); db < - odbcDriverConnect(“Driver = Teradata; DBCName = YourDB; UID = YourUserName; PWD = YourPassword”);数据< - sqlQuery(db,“SELECT TOP 10 * FROM SOME_TABLE;”); odbcClose(db)' – JanLauGe