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数据库。
任何人都知道如何处理这个问题?