Вставить числовые данные из R в базу данных Teradata не удается при отправке во множество строк - PullRequest
0 голосов
/ 17 января 2019

Вставка данных из фрейма данных в 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") .6 1.1.6 ’
  • packageVersion ("DBI") ‘1.0.0’
  • packageVersion ("dbplyr") ‘1.3.0’
  • выберите * из dbc.dbcinfo; ВЕРСИЯ 15.10.07.04
...