【发布时间】:2019-02-01 20:24:57
【问题描述】:
我有数百万行的非常大的文件,我想将它们插入数据库,但我无法同时创建或导入,因为它会阻塞 db 并占用大量内存。所以,我想让从 csv 文件读取索引到索引的工作(例如,第一个工作读取 0 到 1000 行,其他工作读取 1000 到 2000 行)但我认为 CSV.foreach 没有这种功能,我无法在作业的参数中发送 1000 行数据,并且无法在每个作业中打开此文件。所以,请指导我
在获得文件路径后,我读取了总行数(假设为 100 万行)并分为 1000 个作业,在每个作业中我给出文件路径和索引,作业必须从其中开始读取。 在每个工作中
def perform(file_name, index){
CSV.foreach(file_name, :headers => true) do |row| # want to start with index*1000
hash = row.to_hash
if if i>= index*1000 + 1000
Table.import arr_hash
arr_hash = []
break if i>= index*1000 + 1000
end
arr_hash<<Table.new(hash)
end
if arr_hash
Table.import arr_hash
end
}
【问题讨论】:
-
欢迎来到 stackoverflow 社区。您能否展示一些代码或到目前为止您对您的问题所做的研究?
-
请查看有问题的变化
-
你可以看看使用带有 Enumerator::Lazy blog.honeybadger.io/… 的 File 类。然后用 CSV::Row 处理这些行。只是一个想法☺️
标签: ruby-on-rails ruby csv rubygems