4

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

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

4

3 回答 3

2

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

我以前遇到过这个问题,当我遇到它时,那是因为我试图太快地提取太多数据。我发现在这些情况下,有时可以使用较小的 n 值进行多次调用。再说一次,我遇到问题的数据库中的行很大

于 2013-02-27T19:34:24.547 回答
1

一个更好的方法是尝试输入一个非常大的数字,比如 n=1000000,而不是 n=-1。我使用了这个错误并没有出现。在我的情况下,我获取的行数是 113 万

于 2014-08-06T09:30:13.540 回答
1

我有同样类型的问题:

  1. 一次获取所有行:

    df = dbFetch(res, n = -1)

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

  2. 使用循环按块获取:

    而(!dbHasCompleted(res)){
        块 = dbFetch(res, n = 1000)
        打印(行(块))
        df = rbind(df, 块)
    }
    

    =>它返回了一些块一段时间,然后运行到一个零大小块的无限循环([1] 0永远打印“”),即使结果集还没有完成获取所有行:dbHasCompleted(res) == FALSE

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

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

my_df = dbGetQuery(con, my_query)

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

于 2016-09-05T19:09:47.843 回答