2017-07-04 126 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