Sql 使用DBI将R连接到Teradata,以便与knitr一起使用
我正在尝试在knitr中使用SQL引擎: 文档中指出,“要使用knitr SQL引擎,首先需要建立到数据库的DBI连接” 它提供了以下示例:Sql 使用DBI将R连接到Teradata,以便与knitr一起使用,sql,r,knitr,teradata,r-dbi,Sql,R,Knitr,Teradata,R Dbi,我正在尝试在knitr中使用SQL引擎: 文档中指出,“要使用knitr SQL引擎,首先需要建立到数据库的DBI连接” 它提供了以下示例: library(DBI) db <- dbConnect(RSQLite::SQLite(), dbname = "sql.sqlite") 但是是否存在DBI连接到Teradata的Exmaple?您不能连接到DBI包-它只定义了一个接口(想想模板),DBI兼容包必须实现这个接口。您应该做的是使用RJDBC包——它实现了DBI方法。不要使用ROD
library(DBI)
db <- dbConnect(RSQLite::SQLite(), dbname = "sql.sqlite")
但是是否存在DBI连接到Teradata的Exmaple?您不能连接到DBI包-它只定义了一个接口(想想模板),DBI兼容包必须实现这个接口。您应该做的是使用RJDBC包——它实现了DBI方法。不要使用RODBC,因为它没有实现DBI方法——我猜您需要基于您的问题的DBI。要使用RJDBC创建到Teradata的连接,需要遵循以下几个步骤 您需要从Teradata下载JDBC驱动程序。您需要成为Teradata的客户才能获得此服务 如果下载并查看zip或tar文件,您将发现两个jar文件:
- terajdbc4.jar
- tdgssconfig.jar
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 )
库(RJDBC)
jars您不能连接DBI包——它只定义了一个接口(想想模板),DBI兼容包必须实现这个接口。您应该做的是使用RJDBC包——它实现了DBI方法。不要使用RODBC,因为它没有实现DBI方法——我猜您需要基于您的问题的DBI。要使用RJDBC创建到Teradata的连接,需要遵循以下几个步骤
您需要从Teradata下载JDBC驱动程序。您需要成为Teradata的客户才能获得此服务
如果下载并查看zip或tar文件,您将发现两个jar文件:
- terajdbc4.jar
- tdgssconfig.jar
将这些文件解压缩到系统上的已知位置
现在您需要安装install.packages('RJDBC')包和依赖项
由于JDBC是基于Java的,请确保安装了最新的Java运行时。你可以在java.com上了解到这一点——只是要注意,你得到的java版本(32或64位)与你在R中得到的版本相同。上次我检查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 )
库(RJDBC)
jars另外,如果要在knitr中使用SQL代码块引擎,knitr的当前版本与RJDBC的当前版本不兼容。RJDBC未实现DBI方法dbGetRowCount。作为一个快速修复,我删除了对行数/的检查,现在您可以从github的mattwg/knitr安装该包。对于某些用例,它可能会失败。我将尝试让RJDBC的维护人员实现该方法 另外,如果要在knitr中使用SQL代码块引擎,则knitr的当前版本与RJDBC的当前版本不兼容。RJDBC未实现DBI方法dbGetRowCount。作为一个快速修复,我删除了对行数/的检查,现在您可以从github的mattwg/knitr安装该包。对于某些用例,它可能会失败。我将尝试让RJDBC的维护人员实现该方法 我发布的解决方案适用于Teradata。我使用odbc包和Windows odbc数据源管理员。下面是一个RMarkdown示例:
```{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
```
`{r}
#不幸的是,odbc还没有在CRAN上
#所以我们需要开发工具
#安装程序包(devtools)
图书馆(devtools)
devtools::install_github(“rstats db/odbc”)
#使用手动设置的名称从Windows ODBC数据源管理员获取连接信息。
#如果您不知道这是什么,只需在windows开始菜单中搜索“ODBC数据源管理员”
con我发布的解决方案适用于我的Teradata。我使用odbc包和Windows odbc数据源管理员。下面是一个RMarkdown示例:
```{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
```
`{r}
#不幸的是,odbc还没有在CRAN上
#所以我们需要开发工具
#安装程序包(devtools)
图书馆(devtools)
devtools::install_github(“rstats db/odbc”)
#使用手动设置的名称从Windows ODBC数据源管理员获取连接信息。
#如果您不知道这是什么,只需在windows开始菜单中搜索“ODBC数据源管理员”
con下载JDBC驱动程序不需要Teradata客户,只需在Teradata的开发者交换上注册一次即可。下载JDBC驱动程序不需要Teradata客户,只需在Teradata的开发者交换上注册一次即可。