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 のテーブルに書き込みます。3つのアプローチを試しました
最初に、作成するテーブルをそのデータ型で定義する場所を試してください
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 '('.)"
2 番目のアプローチでは、最初にテーブルを作成し、次にデータフレームを追加しようとします。
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() を使用する場合はそうではありません)
3 回目の試行では、データを追加する代わりに上書きしようとします。
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 データベースに書き込むためのソリューションを探しています。
誰でもこの問題に対処する方法を知っていますか?