使用RPostgres批量查询重复返回首100万条数据的解决方法
解决RPostgres批量导出数据重复写入的问题
你的代码里有两个关键错误导致重复写入首100万条记录:
- 写入变量名错误:你用
write.csv(data, ...),但实际每次获取的新数据存在chunk变量里,这里应该写chunk而非data。如果data是环境里的旧变量,就会每次重复写入旧数据。 - 路径与文件名问题:Windows路径的反斜杠
\需要转义成\\,或者直接用正斜杠/;另外文件名没加.csv后缀,生成的文件不是标准CSV格式。
修改后的完整代码:
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) # 每次获取100万条新数据 # 修正路径分隔符,添加.csv后缀 filename <- paste0("path/EuropeanSMEs_", i, ".csv") # 写入当前获取的chunk数据 write.csv(chunk, filename, row.names = FALSE) } dbClearResult(res) dbDisconnect(wrds)
关键修改说明:
- 把
write.csv(data, ...)改成write.csv(chunk, ...),确保每次写入的是刚获取的新批次数据。 - 用
paste0代替paste,避免文件名出现多余空格;同时添加.csv后缀,保证文件是可识别的CSV格式。 - 将路径中的
\替换为/(或者转义为\\),避免R解析路径时出错。
内容的提问来源于stack exchange,提问作者mhohaus
相关产品推荐
相关产品推荐

