1400万行のデータをRubyで扱うと...?

in

仕事で

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