Пакетное выполнение запроса в RPostgres, возвращающее те же данные
В настоящее время я пытаюсь загрузить большую базу данных с помощью RPostgres, однако, когда я пытаюсь записать результаты в csv в пакетном режиме, он записывает одни и те же данные снова и снова (всегда первые 1M записей). Вот код, который я сейчас использую:
wrds <- dbConnect(Postgres(),
host='wrds-pgdata.wharton.upenn.edu',
port=9737,
dbname='wrds',
sslmode='require',
user='username')
res <- dbSendQuery(wrds, "SELECT VARNAMES FROM DATABASE WHERE CONDITIONS")
i = 0
while (!dbHasCompleted(res)) {
i <- i+1
chunk <- dbFetch(res, 1000000) # Fetch 1,000,000 at a time
filename <- paste("path\\EuropeanSMEs_", i)
write.csv(data, filename, row.names = FALSE)
}
dbClearResult(res)
dbDisconnect(wrds)
Как изменить код, чтобы он извлекал новый набор из 1 млн строк на каждой итерации?
1 ответ
Я не думаю, что есть простой способ сделать это. С использованиемPROC EXPORT
из SAS будет работать (затем вам нужно будет загрузить.csv
файл из WRDS). Если бы мне действительно нужен был файл CSV с большим набором данных WRDS, я мог бы адаптировать свою функцию для записи в локальный файл CSV, а не в базу данных PostgreSQL.
Другой вариант — найти переменную, которая примерно разбивает данные на миллион строк. Например,year
или аналогичный и используйтеWHERE
часть SQL для получения строк по частям. С использованиемdbplyr
(см. примеры здесь , возможно, вы могли бы написать небольшую функцию дляcollect()
данные по году или какой-либо другой переменной разделения и записать в CSV.