使用RJDBC将{R DataFrame写入Teradata

时间:2017-02-17 14:39:32

标签: r teradata rjdbc

我们希望将数据框插入teradata中的表中。所以我们连接到数据库

drv =     JDBC("com.teradata.jdbc.TeraDriver","C:\\Users\\~\\TeradataJDBCDDriver\\terajdb    c4.jar;C:\\Users\\~\\TeradataJDBCDDriver\\tdgssconfig.jar")  
conn = dbConnect(drv,"jdbc:teradata://###","username","password") 

所以我们创建了一个数据框:

column1<-c(1,2,3,4)
column2<-c("bar1","bar2","bar3","bar4")
df=data.frame(column1,column2)

现在我们想将数据帧写入teradata中的表。我们尝试了三种方法

首先尝试我们使用其数据类型

定义要创建的表
dbWriteTable(conn,"temp.test_table(a int,b varchar(100))", df)

然后出现以下错误:

"Error in .local(conn, statement, ...) : execute JDBC update query failed in     dbSendUpdate ([Teradata Database] [TeraJDBC 15.10.00.33] [Error 3706] [SQLState     42000] Syntax error: expected something between ')' and '('.)"

第二种方法是我们首先创建一个表并尝试将数据帧附加到第二个。

dbSendUpdate(conn,"create table temp.test_table(a int,b varchar(100))")
dbWriteTable(conn,"temp.test_table", df,row.names=F,overwrite=F,append = T)

这会导致以下错误:

Error in .local(conn, name, value, ...) : Cannot append to a non-existing table `temp.test_table'

当我们使用dbListTables()检查表是否存在时,该表确实存在。 (但如果我们使用dbExistTable())

在第三次尝试中,我们尝试覆盖而不是附加数据。

dbWriteTable(conn,"temp.test_table", df,row.names=F,overwrite=T,append = F)

导致以下错误:

Error in .local(conn, statement, ...) : execute JDBC update query failed in dbSendUpdate ([Teradata Database] [TeraJDBC 15.10.00.33] [Error 3803] [SQLState 42S01] Table 'test_table' already exists.)

现在它声明该表已经存在(应该没问题,因为我们要覆盖它)。但是表格没有被覆盖。

总而言之,我们正在寻找一种解决方案,将数据帧从r写入teradata数据库。

任何人都知道如何处理这个问题?

0 个答案:

没有答案