RMySQL,获取错误 - RS-DBI驱动程序警告:(获取行时出错)

时间:2012-03-26 15:09:36

标签: mysql r fetch rmysql

我正在使用RMySQL从数据表中获取一些行(表格很大,所以我不能在这里发布,但基本上包含一堆数字..总共10列和大约12,000行)。运行fetch(con, n=-1)时出现以下错误: RS-DBI driver warning: (error while fetching rows),服务器只返回1713行。

如果我删除了一些被提取的列,那么这似乎工作正常。有谁知道这可能与什么有关?我甚至不知道从哪里开始调试。这可能是服务器端设置吗?我的R会话有足够的内存(20演出)。

3 个答案:

答案 0 :(得分:1)

每列是数字还是数字列表?也就是说,每列中有多少字节?

我之前遇到过这个问题,当我遇到它时,这是因为我试图过快地提取太多数据。我发现在这些情况下,使用较小的n值进行多次调用有时可以正常工作。然后,我遇到麻烦的数据库中的行已经很大了

答案 1 :(得分:1)

一个更好的解决方案是代替n = -1尝试输入一个非常大的数字,如n = 1000000。我使用它之后没有出现错误。在我的例子中,我获取的行数是1.13百万

答案 2 :(得分:1)

我遇到了同样的问题:

  1. 获取所有行一次:

    df = dbFetch(res, n = -1)

    =>它只返回结果集的一部分,并停止获取更多行。

  2. 使用循环来获取块:

    while (!dbHasCompleted(res)) {
        chunk = dbFetch(res, n = 1000)
        print(nrow(chunk))
        df = rbind(df, chunk)
    }
    

    =>它返回了一段时间,然后进入无限循环的零大小的块(打印" [1] 0"永远),即使结果集尚未完成以获取所有行:{{ 1}}。

  3. 然后,我使用了这个策略:

    使用" dbHasCompleted(res) == FALSE"运行查询捕获结果集的大小。在行计数[select count(1) from table where ...]中添加1并使用此" count + 1"作为row_count = as.integer(dbFetch(res, n = 1)) + 1参数,在下一个查询中一次获取所有行。到目前为止似乎没问题......但后来我知道了这种形式:

    n

    更好的方法,还没有发现错误。