发送到许多行时,将R中的数字数据插入Teradata数据库失败

时间:2019-01-17 08:17:13

标签: r teradata dbi dbplyr

将R中的数据帧中的数据插入Teradata数据库上的预定义表中可以很好地工作,并且对于小型(几行)数据帧来说非常快。但是,当我插入许多数字值时,我发现了一个奇怪的行为。插入过程因错误而失败:

  

result_insert_dataframe(rs @ ptr,值)中的错误:
  nanodbc / nanodbc.cpp:1791:HY104:[Teradata] [ODBC Teradata驱动程序]   精度无效:cbColDef值超出范围

这是一个小代表:

/* Teradata database - creating table */
create table upload_test (
    ID      INTEGER,
    val     DECIMAL(8,4)
);

插入一个小的数据框可以正常工作:

# R creating dataframe and send it to db
up_test1k = tibble(ID=1:1000, val=0.1234)

con = DBI::dbConnect(odbc::odbc(), ...)
dbplyr::db_insert_into(con, "upload_test", up_test1k)

插入具有2000行的数据框失败:

up_test2k = tibble(ID=1:2000, val=0.1234)
dbplyr::db_insert_into(con, "upload_test", up_test2k)

Error in result_insert_dataframe(rs@ptr, values) : 
 nanodbc/nanodbc.cpp:1791: HY104: [Teradata][ODBC Teradata Driver] Invalid 
 precision: cbColDef value out of range

相同的行为(可以行1000行,失败2000行)
  • 使用其他功能:DBI :: dbWriteTable(...,append = TRUE)
  • 将列定义更改为DECIMAL(18,8)
  • 在数据框中定义val as.character()

插入仅包含整数和字符的较大数据框(> 10'000行)可以正常工作。


系统信息:

  • R.Version()$ version.string“ R版本3.5.0(2018-04-23)”
  • packageVersion(“ odbc”)'1.1.6'
  • packageVersion(“ DBI”)'1.0.0'
  • packageVersion(“ dbplyr”)“ 1.3.0”
  • 从dbc.dbcinfo中选择*;版本15.10.07.04

0 个答案:

没有答案