dplyr 过滤具有大量匹配项的数据库表

cde*_*man 5 database r dplyr dbplyr

我正在使用与我的数据库接口的包dplyrdbplyr我有一个包含数百万条记录的表。我还有一个与我希望过滤的同一个表中的键相对应的值列表。通常我会做这样的事情来过滤表格。

library(ROracle)

# connect info omitted
con <- dbConnect(...)

# df with values - my_values

con %>% tbl('MY_TABLE') %>% filter(FIELD %in% my_values$FIELD)
Run Code Online (Sandbox Code Playgroud)

但是,该my_values对象包含超过 500K 的条目(因此我在这里不提供实际数据)。当它们基本上被放入IN语句中时(它基本上挂起),这显然效率不高。通常,如果我编写 SQL,我会创建一个临时表并编写一个WHERE EXISTS子句。但在这种情况下,我没有写权限。

如何在 R 中提高查询效率?

Pol*_*eer 1

请注意这是否有帮助,但有一些建议:

  1. 查找其他过滤条件。例如,如果my_values$FIELD是连续的或者值列表可以通过其他列推断,您可以从过滤器寻求帮助betweenfilter(between(FIELD, a, b))?
  2. 分而治之。分成my_values小批次,对每个批次进行查询,然后合并结果。这可能需要一段时间,但应该很稳定并且值得等待。