DBI :: dbWriteTable, недопустимая многобайтовая строка - PullRequest
0 голосов
/ 11 февраля 2019

Большой набор данных, импортированный из базы данных MS Access, данные затем подмножества по дате и экспортируются в базу данных SQL.

Экспорт с помощью команды sqlsave работает очень хорошо, однако из-за размера набора данных (более 500 000 строк с 73 переменными) он не подходит.

При попытке записи данных с использованием odbc генерируетсяследующая ошибка: ошибка в nchar (as.character (x)): недопустимая многобайтовая строка, элемент 62220

При использовании Google и просмотре Stackoverflow я видел, что эта ошибка обычно относится к нестандартным символам в данных.

Я использовал dplyr для удаления всех нестандартных символов перед тем, как попытаться записать таблицу в SQL, та же ошибка.

Затем я экспортировал файл в csv с использованием кодировки UTF-8 и вернул его обратно.при использовании кодировки UTF-8 перед попыткой записи таблицы в SQL, та же ошибка.

Наконец, я попробовал метод указания максимальной длины столбца и структуры каждого столбца в формате varchar (255), float или date,Та же ошибка.

library(odbc)
library(RODBC)
library(DBI)
library(data.table)

setwd("E:/BUS_INSIGHTS/David r scripts/PUNE_Claims")

odbcCEDBS0233 <- dbConnect(odbc::odbc(), dsn = "CEDBS0233")
CEDBS0233 = odbcConnect("CEDBS0233")

PUNE <- dbConnect(drv = odbc::odbc(), .connection_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=E:/Motor/Data/ZC Combined/2018/1812/ZC Combined Pune.accdb")

PUNE <- subset(PUNE, DATE_OF_LOSS > as.Date("2009-01-01"))

require(dplyr)
clean <- PUNE %>%
mutate_all(funs(gsub("[[:punct:]]", "", .)))

DBI::dbWriteTable(con = odbcCEDBS0233,
              name = SQL('PUNE_Claims'),
              value = clean,
              overwrite=TRUE,)

Я пробовал различные другие методы, такие как запись csv напрямую в SQL (к сожалению, наш сервер SQL не допустит этого).Используя Regex, и другие вещи, которые я сейчас забыл.

Я полностью ударился о кирпичную стену, я понятия не имею, почему sqlsave с радостью выгружает данные, а odbc отказывается.

Я не могуузнайте, как найти элемент 62220, чтобы увидеть, что не так, но с помощью dplyr, удаляющего все плохие символы, проблем быть не должно.

Я в ваших руках, любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 19 марта 2019

Если вы знаете, какой столбец вызывает эту проблему, вы можете выполнить следующие действия:

x <- iconv(x,"WINDOWS-1252","UTF-8")

В противном случае просто запустите цикл для каждого столбца, чтобы преобразовать его в UFT-8

* 1006.*

Это должно решить проблему.

...