1400万行のデータをRubyで扱うと...?
Posted 12月 27th, 2006 by hippos
仕事で
id,name,amount,date :
のような構成のcsvファイルをMySQLのtable foo(id,category,name,price,value)とぶつけて
id,category,name,amount,price,date :
に変換して出力する必要があったのでちょっとRubyでコードを書いてみました。cvsファイルはid列でソートされています。
require 'mysql'
require 'csv'
id = nil
category = nil
price = nil
msql = Mysql::new('localhost','mysql','mypass','db')
CSV::Reader.create(File.open(ARGV[0],'r')).each { | row |
if id != row[0]
id = row[0]
result = msql.query("select * from foo where id = #{id}")
if result.num_rows == 0
puts "error! #{id}"
break;
end
result.each do | var |
category = var[0]
price = var[1]
end
end
puts "#{id},#{category},#{row[1]},#{row[3]},#{price},#{row[2]}"
}
msql.close();
いえ、動くんですよ。結果も欲しいものが得られました、テストでは。
ただ、本番のCSVファイル....14839193件もあったんですよ。いくら待って終わりませんです。計測無用。というわけで、玉砕しました。(しかも、来月から僕のDaily Workだってさ。マジ!?)
この記事のトラックバックURL:
http://hippos-lab.com/blog/trackback/91










Comments