У меня есть несколько вопросов:
- Я хочу сохранить все данные в SQL Server, используя R. Но я не смог импортировать большие объемы данных из-за некоторых проблем.
Существуют следующие проблемы:
Пример кода проблемы:
library(DatabaseConnector)
library(devtools)
connectionDetails <- createConnectionDetails(dbms="sql server", server="localhost", user="sa", password="xxxxxxxxxxx", schema="NHID_JK")
conn <- connect(connectionDetails)
NHID_GY20_T1_2003 <- read.table("C:/Users/BI/Documents/R/win-library/3.5/WORK_DATA/01.jk/NHID_GY20_T1_2003.TXT", header=TRUE, sep="|", na.strings = NULL, encoding="euc-kr", stringsAsFactors=FALSE, skip=0)
insertTable(connection = conn, tableName = "NHID_GY20_T1_2003",
data=NHID_GY20_T1_2003, dropTableIfExists = TRUE, createTable=TRUE,
tempTable=FALSE, useMppBulkLoad=FALSE)
disconnect(conn)
Пример ошибки после кодирования:
Ошибка в rJava ::. Jcall (batchedInsert, "V", "setString", i, as.character (column)):
java.lang.OutOfMemoryError: пространство кучи Java
Кроме того, я получаю это предупреждение:
В max (nchar (as.character (obj)), na.rm = TRUE): нет не пропущенных аргументов для max; возвращая -Inf
Желаемый результат: код должен сохранять все данные в таблицу SQL Server (например: dbo.NHID_GY20_T1_2003
).
- Я хочу сохранить все данные (2002-2013 гг.) На SQL Server с использованием R. Вы знаете, как импортировать все данные при резке каждых 10000 единиц с использованием R?
Есть следующие проблемы:
Хотя он может сохранять почти данные, за исключением части данных целиком.
Пример кода проблемы:
connectionDetails <- DatabaseConnector::createConnectionDetails(dbms="sql
server", server="localhost", user="sa", password="xxxxxxxxxxxx",
schema="NHID_JK")
dataFolder <- "C:/Users/BI/Documents/R/win-library/3.5/WORK_DATA/02.T120"
nrows <- 10000
conn <- DatabaseConnector::connect(connectionDetails)
#1 Identify files in the folders
fileLists<-list.files(dataFolder,full.names=FALSE)
for (file in fileLists){
#file<-fileLists[13]
con <- file(description=file.path(dataFolder,file),open="r")
tableName<-gsub(".[tT][xX][tT]","",file)
##Making the table with the tableName
data <- read.table(con, nrows=nrows, skip=0,
header=TRUE, sep="|", na.strings = NULL,
encoding="euc-kr", stringsAsFactors=FALSE)
colNames<-names(data)
#Insert table
DatabaseConnector::insertTable(connection = conn, tableName = tableName,
data=data, dropTableIfExists = FALSE, createTable=TRUE, tempTable=FALSE,
useMppBulkLoad=FALSE)
repeat {
if (nrow(data) ==0) break
## process chunck 'data'here, then..
## ..read next chunck
if (nrow(data) != nrows) break
data <- tryCatch({
read.table(con, nrows=nrows, skip=0,
header=TRUE, sep="|", na.strings = NULL, encoding="euc-kr", stringsAsFactors=FALSE)
})
names(data)<-colNames
#Insert table
tryCatch({
DatabaseConnector::insertTable(connection = conn, tableName = tableName, data=data, dropTableIfExists = FALSE, createTable=FALSE, tempTable=FALSE, useMppBulkLoad=FALSE)
})
}
}
close(con)
Пример ошибки после кодирования:
Ошибка в nchar (object, type = "chars"):
недопустимая многобайтовая строка, элемент 4
Кроме того, я получаю следующие предупреждающие сообщения:
1: в max (nchar (as.character (obj)), na.rm = TRUE): нет не пропущенных аргументов для max; возвращая -Inf
2: в max (nchar (as.character (obj)), na.rm = TRUE): нет не пропущенных аргументов для max; возвращая -Inf
Желаемый результат: код должен сохранять все данные в таблицу SQL Server (например: dbo.NHID_GY20_T1_2003
).