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 のテーブルに書き込みます。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 データベースに書き込むためのソリューションを探しています。

誰でもこの問題に対処する方法を知っていますか?

4

0 に答える 0