2014-11-05 3 views
5

После установления соединения, как описано here, я попытался написать очень простой кадр данных (trythis, как показано ниже) к таблице называется gh_test_20141105 в базе данных под названием p_cia_t. Во-первых, я попыталсяЗапись кадра данных в таблицу с использованием Teradata RJDBC

> 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.) 

Далее я создал пустую таблицу в 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{[email protected]}" 

Slot "identifier.quote": 
[1] NA 

> tbl 
[1] "p_cia_t.gh_test_20141105" 

Зачем нужен 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 

ответ

3

Я думаю, что это связано с ошибкой в ​​драйвере JDBC Teradata. Как объяснено здесь (https://groups.yahoo.com/neo/groups/firebird-java/conversations/messages/10951), причина в том, что

Проблема заключается в том, что в dbWriteTable RJDBC отключает AutoCommit (и позволяет его снова в конце), создает таблицу, а затем пытается вставки в него в такой же сделка. Firebird не разрешает вставлять в таблицу, созданную в той же транзакции.

Эта страница (http://developer.teradata.com/blog/ulrich/2013/11/a-wider-test-case-on-r-jdbc-fastload), кажется, предлагает решение, но я думаю, что в основном мы, возможно, придется подождать до тех пор, пока TD исправляет ошибку ...

Мое временное решение обратиться к ODBC (маленький стол) или («fastload < your_fastload_script») (большая таблица) ...

Смежные вопросы