建立作为解释连接后在这里,我试着写一个非常简单的数据帧(trythis如下所示),以一个名为表gh_test_20141105在一个名为数据库p_cia_t.首先,我试过了
> conn <- getTdConnection(vdm='vivaldi')
> dbWriteTable(conn=conn,name=tbl,value=trythis)
Error in .verify.JDBC.result(s, "Unable to execute JDBC prepared statement ", :
Unable to execute JDBC prepared statement INSERT INTO p_cia_t.gh_test_20141005 VALUES(?,?,?,?) ([Teradata Database] [TeraJDBC 14.10.00.17] [Error 3932] [SQLState 25000] Only an ET or null statement is legal after a DDL Statement.)
Run Code Online (Sandbox Code Playgroud)
接下来,我在Teradata中创建了一个空表:
create table p_cia_t.gh_test_20141105 (eenie integer, meenie integer, minie integer, moe integer);
我接下来的两次尝试编写此数据框的方式都是相互矛盾的:
> dbWriteTable(conn=conn,name=tbl,value=trythis,append=T)
Error in .local(conn, statement, ...) :
execute JDBC update query failed in dbSendUpdate ([Teradata Database] [TeraJDBC 14.10.00.17] [Error 3803] [SQLState 42S01] Table 'gh_test_20141105' already exists.)
> dbWriteTable(conn=conn,name=tbl,value=trythis,append=T,overwrite=F)
Error in .local(conn, name, value, ...) :
Cannot append to a non-existing table `p_cia_t.gh_test_20141105'
> trythis
eenie meenie minie moe
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
> conn
An object of class "JDBCConnection"
Slot "jc":
[1] "Java-Object{com.teradata.jdbc.jdk6.JDK6_SQL_Connection@2f242b11}"
Slot "identifier.quote":
[1] NA
> tbl
[1] "p_cia_t.gh_test_20141105"
Run Code Online (Sandbox Code Playgroud)
为什么会append=T反对表已经存在,以及如何添加overwrite=F将异议更改为"不存在的表?" 没有任何意义.
我非常感谢将数据框成功写入Teradata表的任何工作示例,无论是否预先存在,无论是否附加.
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RJDBC_0.2-4 rJava_0.9-6 DBI_0.3.1 dplyr_0.3.0.2 scales_0.2.4 ggplot2_1.0.0 reshape2_1.4
[8] RODBC_1.3-10 data.table_1.9.4
loaded via a namespace (and not attached):
[1] assertthat_0.1 chron_2.3-45 colorspace_1.2-4 digest_0.6.4 grid_3.1.2 gtable_0.1.2 magrittr_1.0.1
[8] MASS_7.3-35 munsell_0.4.2 parallel_3.1.2 plyr_1.8.1 proto_0.3-10 Rcpp_0.11.3 stringr_0.6.2
[15] tools_3.1.2
Run Code Online (Sandbox Code Playgroud)
小智 4
我认为这是由于 Teradata 的 JDBC 驱动程序中的错误造成的。正如这里所解释的,原因是
\n\n\n问题在于,在 dbWriteTable 中,RJDBC 禁用自动提交(并在最后再次启用它),创建表,然后尝试在同一事务中插入该表。Firebird 不允许插入到在同一事务中创建的表中。
\n
此页面似乎提供了一个解决方案,但我认为从根本上来说我们可能必须等到 TD 修复该错误......
\n我的临时解决办法是转向ODBC(小表)或者直接通过system(\xe2\x80\x9cfastload < your_fastload_script\xe2\x80\x9d) (大表)\xe2\x80\xa6调用fastload
| 归档时间: |
|
| 查看次数: |
4474 次 |
| 最近记录: |