RODBC - sqlSave - Почему запрашивается так много памяти?

У меня есть код R, который выглядит следующим образом:

missingDataJson <- toJSON(head(diff))

df <- data.frame(ValidationDate = startTime, DataType = "Panel", MissingData = missingDataJson, stringsAsFactors = F)

sqlSave(odsHandle, df, tablename = "Utility.DailyDataValidation", append=T)

Фрейм данных "df" выглядит следующим образом:

df
       ValidationDate DataType
1 2016-08-22 13:40:37    Panel
                                                                                                                                                                                       MissingData
1 {"SubId":[160822032032,160822032033,160822032034,160822032035,160822032036,160822032037],"ReadTime":[1471887657.787,1471887681.357,1471887705.023,1471887728.483,1471887752.273,1471887776.423]}

Когда я выполняю sqlSave, я получаю следующее сообщение об ошибке:

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
  'Calloc' could not allocate memory (18446744071562067968 of 1 bytes)
In addition: Warning messages:
1: In odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  :
  Reached total allocation of 16287Mb: see help(memory.size)
2: In odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  :
  Reached total allocation of 16287Mb: see help(memory.size)

Почему требуется столько памяти? Размер фрейма данных довольно мал.


person Randy Minder    schedule 24.08.2016    source источник
comment
Если вы перезапустите сеанс R, сможете ли вы воспроизвести ошибку?   -  person nrussell    schedule 24.08.2016
comment
Да, я действительно пробовал это. И я также попытался полностью выключиться и перезапустить. Я получаю ту же ошибку.   -  person Randy Minder    schedule 24.08.2016
comment
Как определяется целевая таблица? Я столкнулся с аналогичной проблемой, когда целевой столбец был определен как max, равный 2 ГБ; Обильно пытался правильно распределить вещи для передачи в структуру C для передачи на сервер ... и все очень быстро взорвалось.   -  person r2evans    schedule 25.08.2016
comment
@ r2evans - у меня есть столбец в БД, который является varchar (max). Как вы это обошли? Для R просто автоматически выделять максимальный объем памяти для столбца кажется нелепым.   -  person Randy Minder    schedule 25.08.2016
comment
Для меня это был не varchar(max) (который у меня есть, и они не проблема), это было image(max). Я не возражаю, но я также не понимаю используемого основного механизма, поэтому я не могу много возражать против использования структур C.   -  person r2evans    schedule 25.08.2016
comment
@ r2evans - Интересно, что когда я не добавляю, а позволяю R создать новую таблицу, она работает, но создает только столбец varchar (255) и обрезает содержимое. Я начинаю думать, что запись в базы данных - не сильная сторона R.   -  person Randy Minder    schedule 25.08.2016
comment
Пожалуйста, имейте в виду, что проблема здесь довольно явно возникает в RODBC, который не является R как таковым, а является пакетом, написанным для R. Возможно, вам больше повезет, спросив о r-sig-db или связавшись напрямую с автором RODBC. (Хотя будьте осторожны, он имеет репутацию немного колючего.) Кроме того, вы можете попробовать вместо этого использовать пакет RSQLServer; это могло бы работать лучше.   -  person joran    schedule 25.08.2016
comment
В настоящее время я перевожу свой проект с RODBC на RSQLServer по нескольким причинам. sqlSave - один из них (хотя не в этом суть).   -  person r2evans    schedule 25.08.2016
comment
Если вы собираетесь использовать RSQLServer, я бы предложил использовать версию Github (возможно, даже функцию - dbi-0_5), которым также может пригодиться версия DBI для Github. @imanuelcostigan был занят его обновлением (и DBI также видит много изменений).   -  person r2evans    schedule 25.08.2016
comment
Чтобы добавить к комментариям @ r2evans, я также отказался от RODBC (но от ROracle, поскольку это мой бэкэнд, а не по собственному желанию) из-за других, различных проблем с RODBC, которые мне не удалось решить. Похоже, что люди из Hadley / Rstudio работают над альтернативой (odbconnect), но это далеко от первоначальный выпуск.   -  person joran    schedule 25.08.2016
comment
О, хорошая находка, я этого еще не видел. Я играл с RODBCDBI, но снижение производительности было сдерживающим фактором. Что заставляет вас говорить, что он далек от первоначального выпуска? (Это потому, что его версия 0.0.0.9000? :-)   -  person r2evans    schedule 25.08.2016