有时候,当我通过
这可能会使 R 崩溃,并且通常表明在获取数据之前应进一步过滤或聚合。
在选择是否获取结果之前检查结果的大小将非常有用(而不需要运行两次查询)。
假设我们称
期望的行为:
ROracle
和 dbplyr
连接到我的 Oracle
数据库时,我会运行 dplyr::collect
操作,获取比预期更多的数据和 R 可以处理的数据。这可能会使 R 崩溃,并且通常表明在获取数据之前应进一步过滤或聚合。
在选择是否获取结果之前检查结果的大小将非常有用(而不需要运行两次查询)。
假设我们称
collect2
是允许此操作的 collect
的变体:期望的行为:
small_t <- con %>% tbl("small_table") %>%
filter_group_etc %>%
collect2(n_max = 5e6) # works fine
big_t <- con %>% tbl("big_table") %>%
filter_group_etc %>%
collect2(n_max = 5e6) # Error: query returned 15.486.245 rows, n_max set to 5.000.000
这可行吗?
我也愿意使用 ROracle
/ DBI
而不使用 dplyr
来解决问题,例如:
dbGetQuery2(con, my_big_sql_query,n_max = 5e6) # Error: query returned 15.486.245 rows, n_max set to 5.000.000
编辑:
请见下方已发布的部分解决方案作为答案,这并不是最优解,因为有些时间被浪费在获取无用数据上。
nrow
的测试不足以吗? - F. Privé