1

我们想将数据框插入到 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 数据库的解决方案。

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

4

0 回答 0