【问题标题】:RODBC ERROR: 'Calloc' could not allocate memoryRODBC 错误:“Calloc”无法分配内存
【发布时间】: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)

我的问题是:

  1. 我该如何解决这个问题?

  2. 这是我应该使用的格式吗?

  3. 此外,即使上述方法有效,上传大约 5k 条记录也需要大约一个小时。是不是太长了?这是应该花费的正常时间吗?如果没有,我还能做得更好。

【问题讨论】:

    标签: sql-server r database azure-sql-database rodbc


    【解决方案1】:

    RODBC 非常古老,使用 NVARCHAR 列可能有点不稳定。尝试改用 RSQLServer 包,它提供了连接到 SQL Server 的替代方法(并且还提供了 dplyr 后端)。

    【讨论】:

    • 由于 CRAN 版本不可用,我尝试了:devtools::install_github('imanuelcostigan/RSQLServer') 这给出:“错误:依赖项 'dbplyr' 不适用于包 'RSQLServer'” 然后: devtools::install_github('tidyverse/dbplyr') 导致:“错误:依赖项 'glue' 不适用于包 'dbplyr'”然后:“警告:构建 R 包需要 Rtools,但当前未安装。 "立即安装 Rtools。
    • RSQLServer 在 CRAN 上。再次尝试 install.packages。
    • > install.packages("RSQLServer") 将包安装到“C:/Users/ds/Documents/R/win-library/3.3”(因为“lib”未指定)安装时出现警告。包:包“RSQLServer”不可用(对于 R 版本 3.3.3)
    • 如果您使用的是 Microsoft R,您的存储库将指向旧的 MRAN 快照。将 repo 设置为 cloud.r-project.org。
    • 你是对的。我正在使用另一个镜子。 “RSQLServer”已安装,我现在就试一试。谢谢。
    猜你喜欢
    • 2015-08-15
    • 2022-01-11
    • 2019-07-14
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多