我正在尝试连接到几分钟前运行良好的 monetdblite 数据库。在另一个会话中关闭连接,重新打开 R 后,我收到此错误消息:
con <- dbConnect(MonetDBLite(), path_db)
Error in MonetDBLite::monetdb_embedded_startup(embedded, !getOption("monetdb.debug.embedded", :
Failed to initialize embedded MonetDB !FATAL: BBPinit: "free" value larger than "size" in heap of bat 9
如果我再试一次,我会得到:
Error in MonetDBLite::monetdb_embedded_startup(embedded, !getOption("monetdb.debug.embedded", :
Failed to initialize embedded MonetDB !FATAL: BBPaddfarm: bad rolemask
我在 R 和 RStudio 中对此进行了尝试。
编辑:感谢您的回复(以及 MonetDbLite 包,顺便说一句)。在我完成创建数据库后发生此错误;我输入了一些数据(大约 2.7e9 行)并成功地与数据库断开连接(即我使用 dbDisconnect(con) 并得到 TRUE 作为结果,这就是为什么我认为还有其他问题)。R版本是3.2.2,服务器是windows server 2012 R2。
Edit2 -> 最小可重现示例:
####### Example
library(data.table)
library(MonetDB.R)
data_orig <- data.table(id=rep(1:1e3,each=sample(100,1)))
data_orig[,y:=rnorm(.N)][,t:=1:.N,by=id]
lu <- data.table(t=1:max(data_orig[["t"]]))
dbdir <- tempdir()
con <- dbConnect(MonetDB.R::MonetDB(), embedded = dbdir)
# Create data
dbWriteTable(con,"data_orig",data_orig)
for(i in data_orig[,unique(id)]){
print(i)
query <- paste0("select * from data_orig where id=",i)
data_i <- dbGetQuery(con,query)
setDT(data_i)
tmp <- data_i[lu,roll=T,on="t"]
dbWriteTable(con,"data_new",tmp,append=T)
}
dbDisconnect(con)
基本上我从数据库中读取数据,聚合它,然后再放回去。