我正在使用RMySQL从数据表中获取一些行(表格很大,所以我不能在这里发布,但基本上包含一堆数字..总共10列和大约12,000行)。运行fetch(con, n=-1)
时出现以下错误:
RS-DBI driver warning: (error while fetching rows)
,服务器只返回1713行。
如果我删除了一些被提取的列,那么这似乎工作正常。有谁知道这可能与什么有关?我甚至不知道从哪里开始调试。这可能是服务器端设置吗?我的R会话有足够的内存(20演出)。
答案 0 :(得分:1)
每列是数字还是数字列表?也就是说,每列中有多少字节?
我之前遇到过这个问题,当我遇到它时,这是因为我试图过快地提取太多数据。我发现在这些情况下,使用较小的n值进行多次调用有时可以正常工作。然后,我遇到麻烦的数据库中的行已经很大了
答案 1 :(得分:1)
一个更好的解决方案是代替n = -1尝试输入一个非常大的数字,如n = 1000000。我使用它之后没有出现错误。在我的例子中,我获取的行数是1.13百万
答案 2 :(得分:1)
我遇到了同样的问题:
获取所有行一次:
df = dbFetch(res, n = -1)
=>它只返回结果集的一部分,并停止获取更多行。
使用循环来获取块:
while (!dbHasCompleted(res)) { chunk = dbFetch(res, n = 1000) print(nrow(chunk)) df = rbind(df, chunk) }
=>它返回了一段时间,然后进入无限循环的零大小的块(打印" [1] 0
"永远),即使结果集尚未完成以获取所有行:{{ 1}}。
然后,我使用了这个策略:
使用" dbHasCompleted(res) == FALSE
"运行查询捕获结果集的大小。在行计数[select count(1) from table where ...
]中添加1并使用此" count + 1"作为row_count = as.integer(dbFetch(res, n = 1)) + 1
参数,在下一个查询中一次获取所有行。到目前为止似乎没问题......但后来我知道了这种形式:
n
更好的方法,还没有发现错误。