2017-07-04 128 views
2

我正在设置SQL Azure数据库。我需要每天将数据写入数据库。我在Windows10上使用64位R版本3.3.3。某些列包含文本(超过4000个字符)。最初,我使用Microsoft SQL Server Management Studios将一些数据从csv导入到SQL Azure数据库中。我将文本列设置为ntext格式,因为当我尝试使用nvarchar时,max是4000,并且即使它们的长度大约为1100个字符,也有一些值被截断。RODBC错误:'Calloc'无法分配内存

为了追加到我先保存记录时,我已经预定了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条记录大约需要一个小时。这不是太长吗?这是正常的时间量吗?如果不是,我可以做些什么更好。

回答

1

RODBC非常陈旧,并且可能会带有NVARCHAR列有点片状。尝试使用RSQLServer包代替,该包提供了连接到SQL Server的另一种方法(并且还提供了dplyr后端)。

+0

由于CRAN版本不可用我尝试:devtools :: install_github( 'imanuelcostigan/RSQLServer') 这给: “ERROR:依赖 'dbplyr' 不适用于包 'RSQLServer'” 然后:devtools :: install_github('tidyverse/dbplyr')的结果为: “错误:依赖项'glue'不可用于程序包'dbplyr''” 然后:“警告:Rtools是构建R程序包所必需的,但目前尚未安装。 现在安装Rtools。 – deann

+0

RSQLServer IS在CRAN上。再次尝试install.packages。 –

+0

> install.packages( “RSQLServer”) 安装封装成 'C:/Users/ds/Documents/R/win-library/3.3' (为 'LIB' 是未指定) 警告在install.packages: 包'RSQLServer'不可用(对于R版本3.3.3) – deann