Иногда при подключении к моей базе данных Oracle через ROracle и dbplyr я запускаю операцию 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
EDIT:
См. ниже частичное решение, отправленное как ответ, но не оптимальное, потому что какое-то время тратится на извлечение данных, для которых я не нужен.