2017-03-23 147 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