2016-08-10 23 views
1

我試圖使用SQL引擎knitr中使用:http://rmarkdown.rstudio.com/authoring_knitr_engines.html#sql連接R鍵的Teradata使用DBI與knitr

該文件指出,「使用knitr SQL引擎,你首先需要建立一個DBI連接數據庫」

而且它提供了以下例子:

```{r} 
library(DBI) 
db <- dbConnect(RSQLite::SQLite(), dbname = "sql.sqlite") 
``` 

現在,我試圖連接到Teradata的。過去我已經使用RODBC和RJDBC包成功完成了這項工作,並且有相當多的有用文檔。但是,我沒有通過DBI包直接連接,我也找不到任何示例。

我猜,語法類似於RJDBC連接(參考here):

drv = JDBC("com.teradata.jdbc.TeraDriver","ClasspathForTeradataJDBCDriverFiles") 
conn = dbConnect(drv,"jdbc:teradata://DatabaseServerName/ParameterName=Value","User","Password") 
dbGetQuery(conn,"SQLquery") 

但有一個DBI connnection到Teradata的任何exmaples?

感謝

回答

1

不能與DBI包連接 - 這只是定義了一個接口(認爲模板)是DBI兼容封裝必須實現。你應該做的是使用RJDBC包 - 它實現了DBI方法。不要使用RODBC,因爲它沒有實現DBI方法 - 我猜你需要基於你的問題的DBI。要使用RJDBC創建與Teradata的連接,您需要遵循幾個步驟。

您需要從Teradata here的JDBC驅動程序。您需要成爲Teradata的客戶才能獲得此功能。

如果您下載並期待zip或tar文件裏面,你會發現兩個jar文件:

  • terajdbc4.jar
  • tdgssconfig.jar

這些文件解壓縮到一個已知位置在你的系統上。

現在您需要安裝install.packages('RJDBC')軟件包和依賴項。

由於JDBC是基於Java的,因此請確保安裝了最新的Java運行時。你可以在java.com上選擇它 - 只要注意你得到了與R一樣的Java(32或64位)的相同版本。上次我檢查了java站點沒有嘗試併爲你弄明白。如果您必須安裝Java,請確保您重新啓動R會話。

現在您應該能夠加載RJDBC庫並創建連接 - 您需要知道要連接的teradata系統的ip/url以及用戶名和密碼。您還需要指定要連接到數據庫:

library(RJDBC) 

jars <- c("[path to jar]/terajdbc4.jar", "[path to jar]/tdgssconfig.jar") 
drv <- JDBC("com.teradata.jdbc.TeraDriver",jars) 
db <- "jdbc:teradata://[ip of teradata system]/TMODE=TERADATA,charset=UTF8" 
conn <- dbConnect(drv, db, username, password, database) 

採用這種連接方式,你現在可以使用實施DBI方法來查詢數據庫 - 例如dbGetQuery(康涅狄格州,SQL)或dbSendQuery()。

查看RJDBC docs瞭解更多信息。

+0

您不需要成爲Teradata的客戶即可下載JDBC驅動程序,只需在Teradata的Developer Exchange上註冊一次即可。 – dnoeth

1

此外,如果您想在knitr中使用SQL代碼塊引擎,則當前版本的knitr不能與當前版本的RJDBC一起使用。 RJDBC沒有實現DBI方法dbGetRowCount。作爲一個quickfix我刪除了行計數檢查/現在你可以從github在mattwg/knitr安裝包。它可能會在某些使用情況下失敗。我會嘗試讓RJDBC的維護人員實施該方法。

2

我發佈的解決方案here適用於Teradata。我使用odbc軟件包和Windows ODBC數據源管理員。下面是一個令人驚歎的示例:

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

# Get connection info from the Windows ODBC Data Source Administrator using the name you set manually. 
# If you don't know what this is, just search in the windows start menu for  "ODBC Data Source Administrator" 
con <- dbConnect(odbc::odbc(), 'MyDataWarehouse') 
``` 

```{sql connection = con, output.var = result} 
-- This is sql code, comments need to be marked accordingly 
SELECT * FROM SOMETABLE LIMIT 200; 
``` 

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

這在Netezza中適用於我! – johnckane