需要将数据从保存数百万条记录的数据库中导出为 CSV.还需要覆盖 Rails 中的行



我有数百万条记录,我需要将数据导出为 csv。我使用 PG 复制数据和检索数据并将其写入 CSV 来做到这一点。

流程中需要的一项修改是修改从get_copy_data检索的数据,然后写回 csv

你们知道任何优化的方法来实现这一目标吗?

sql_query = 'SELECT encrytped_data_field1, encrytped_data_field2 from table'
destination = "data.csv"
no_of_rows = 0
File.open(destination, "w") do |file|
file.puts '"Decryted data field 1","Decryted data field 2"'
conn = ActiveRecord::Base.connection.raw_connection
conn.copy_data "COPY (#{sql_query}) TO STDOUT WITH CSV;" do
while row = conn.get_copy_data
#row holds the value of encrypted data field 1 and 2 . Need better way to call helper method and decrpty back  
file.write(row)
no_of_rows +=1
end
end
end 
return no_of_rows

对于 Web 请求中的如此大的文件,您需要实现流式下载。否则,您必须在内存中保存大量原始数据(坏数据(,或者将大量数据写入磁盘只是为了稍后删除它(也不好(。

您应该能够轻松找到示例,例如 https://www.bernardo.me/blog/2017/06/28/streaming-csv-with-rails/和 https://medium.com/table-xi/stream-csv-files-in-rails-because-you-can-46c212159ab7

您将看到,在文件流式传输时,您将可以访问该文件的某些部分,因此您还必须在流式传输时进行修改。

最新更新