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