Это база данных Oracle 12. Я использую R DBI с RODBC.
У меня сложный запрос с несколькими подзапросами и операторами WITH. Набор результатов составляет всего около 3000 строк, но он возвращает только 800 в R и ровно 800 строк каждый раз.
Я пробовал dbSendQuery, за которым следует dbFetch, или просто dbGetQuery сам по себе, установив n = 5000 и другие значения, которые должны возвращать все строки, но ничего не работает. Я могу успешно получить меньше, чем 800 строк, установив n = 500, но не более 800.
Когда я добавляю столбцы в оператор SELECT, количество возвращаемых строк уменьшается. Это не проблема JOIN, полный запрос отлично работает при его исходном запуске, только не в R.
Я также пробовал получать результаты фрагментами, используя следующий код, но он получит только первый фрагмент перед завершением цикла и возвратом значения, говорящего о том, что достигнуты полные результаты:
while (!dbHasCompleted(rs)) {
chunk <- dbFetch(rs, 100)
print(nrow(chunk))
}
Если я сохраню все операторы WITH одинаковыми и сохраню все подзапросы, но уменьшу окончательный SELECT до одного столбца из каждого WITH или подзапроса, это нормально, я получу все строки. И, как я уже сказал, полный запрос отлично работает в SQL Developer.
Кажется, что может быть какой-то предел размера / памяти, но для 3000 строк это не должно быть проблемой, и в любом случае у меня тонны оперативной памяти, а количество ресурсов, используемых R при отправке и извлечении результатов, незначительно , а набор данных крошечный. Сложен только запрос.
RODBC
используетDBI
интерфейс. Вы имеете в виду пакетodbc
? - person r2evans   schedule 27.07.2020IF
, не может выполняться в вызовах RdbGetQuery
. - person Parfait   schedule 27.07.2020RODBCDBI
, tx - person r2evans   schedule 28.07.2020RODBCDBI
не является частью проблемы. Можете ли вы воспроизвести проблему, используя (возможно)odbc
? (RODBCDBI
не обновлялся более 4 лет.) Тест может быть таким же простым, какcon <- dbConnect(odbc::odbc(), ...)
. - person r2evans   schedule 28.07.2020col2
.col3
и т. Д.? Может быть, даже вызватьCAST
для преобразования в известные, более короткие типы. - person Parfait   schedule 28.07.2020