无法在 R DBI 中获得完整的结果集

Can't get full result set in R DBI

该数据库是 Oracle 12。我将 R DBI 与 RODBC 结合使用。

我有一个包含多个子查询和 WITH 语句的复杂查询。结果集只有3000行左右,但在R中只有returns 800行,而每次正好 800行。

我尝试了 dbSendQuery,然后是 dbFetch,或者只是 dbGetQuery 本身,设置 n = 5000 和其他应该 return 所有行的值,但没有任何效果。通过设置 n = 500,我可以成功地获得少于 的 800 行,但不会超过 800。

当我向 SELECT 语句添加列时,行数 returned 减少了。这不是 JOIN 问题,完整查询在 运行 原生时工作正常,而不是在 R 中。

我也尝试过使用如下代码获取块中的结果,但它只会在结束循环之前获取第一个块并 returning 一个表示已达到完整结果的值:

while (!dbHasCompleted(rs)) {
    chunk <- dbFetch(rs, 100)
    print(nrow(chunk))
}

如果我保持所有 WITH 语句相同并保留所有子查询,但从每个 WITH 或子查询中减少最后的 SELECT 单个列,没关系,我得到了所有行。正如我所说,完整的查询在 SQL Developer.

中原生运行良好

似乎有一些 size/memory 限制,但是对于 3000 行这应该不是问题,而且无论如何我有大量的 RAM,以及 R 使用的资源量当发送和获取结果可以忽略不计时,数据集很小。只是查询比较复杂。

我发现了问题。

问题是返回结果中的值无效。该查询在 SQL Developer 中运行良好,因为只有 returns 结果为 50 个块。R DBI / RODBC 获取完整的结果集,但也(显然)为 100 个块,这就是为什么它总是提取了一组记录:800+ 块具有无效值,因此在出现错误之前只提取了前 800 条。

即使尝试从 Developer 导出查询结果也没有显示具体错误,它只是失败了。我不得不翻阅所有结果以找到有问题的值并修复它。之后一切正常。