R无法通过RODBC连接到正常工作的Teradat odbc连接

时间:2017-03-23 15:38:07

标签: r teradata rodbc

我在尝试通过RODBC将R连接到Teradata时遇到问题。

我的系统: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" 

任何建议都会非常受欢迎! 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是我用来连接Teradata DW的方法。 即使在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 VM上设置它,所以我无法从经验中说出来。但是,程序包作者在Linux系统上提供了以下information等效方法:

  

MacOS / Linux

     

在MacOS和Linux上,需要有两个单独的文本文件   编辑。 UnixODBC包含一个命令行可执行文件odbcinst   可用于查询和修改DSN文件。但这些都很简单   如果需要,您也可以手动编辑文本文件。

     

有两个不同的文件用于设置DSN信息。 -   odbcinst.ini - 定义驱动程序选项 - odbc.ini - 定义   连接选项

     

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

     

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

     

ODBCINST.INI

     

包含驱动程序信息,尤其是驱动程序的名称   图书馆。可以在同一文件中指定多个驱动程序。

     

[PostgreSQL Driver] Driver = /usr/local/lib/psqlodbcw.so

     

[SQLite Driver] Driver = /usr/local/lib/libsqlite3odbc.dylib   ODBC.INI

     

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

     

[PostgreSQL] Driver = PostgreSQL驱动程序数据库
  = test_db Servername = localhost UserName = postgres Password = password Port = 5432

     

[SQLite] Driver = SQLite Driver Database = / tmp / testing请参阅   另外:unixODBC没有GUI以获取更多信息和示例。