【发布时间】:2017-12-07 17:07:14
【问题描述】:
我正在设置一个 SQL Azure 数据库。我需要每天将数据写入数据库。我在 Windows10 上使用 64 位 R 版本 3.3.3。某些列包含文本(超过 4000 个字符)。最初,我使用 Microsoft SQL Server Management Studios 将一些数据从 csv 导入到 SQL Azure 数据库中。我将文本列设置为 ntext 格式,因为当我尝试使用 nvarchar 时,最大值为 4000,并且一些值被截断,即使它们的长度约为 1100 个字符。
为了追加到数据库中,我首先将记录保存在一个临时表中,因为我已经预定义了 varTypes:
varTypesNewFile <- c("Numeric", rep("NTEXT", ncol(newFileToAppend) - 1))
names(varTypesNewFile) <- names(newFileToAppend)
sqlSave(dbhandle, newFileToAppend, "newFileToAppendTmp", rownames = F, varTypes = varTypesNewFile, safer = F)
然后使用:
附加它们insert into mainTable select * from newFileToAppendTmp
如果文本不太长,上述方法确实有效。但是,有时在执行 sqlSave 命令时会出现以下错误:
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
'Calloc' could not allocate memory (1073741824 of 1 bytes)
我的问题是:
我该如何解决这个问题?
这是我应该使用的格式吗?
此外,即使上述方法有效,上传大约 5k 条记录也需要大约一个小时。是不是太长了?这是应该花费的正常时间吗?如果没有,我还能做得更好。
【问题讨论】:
标签: sql-server r database azure-sql-database rodbc