我在尝试通过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"
任何建议都会非常受欢迎! 提前谢谢。
答案 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以获取更多信息和示例。