小さな ruby スクリプトと mysql2 gem を使用して、mysql データベースから以下をエクスポートします。
require 'csv'
require 'mysql2'
begin
db = Mysql2::Client.new( :host => ".", :username => "xyz", :password => 'xyz', :database => 'xyz')
results = db.query 'select * from mytable'
CSV.open("C:/tmp/mytable.csv", "w") do |csv|
csv << results.fields
results.each do |row|
csv << row.values
end
end
end
これは小さなテーブルでは問題なく機能しますが、大きなテーブルでは別の方法をとるべきだと思います。ここで間違っている可能性がありますが、テーブル全体をメモリに読み込んでから、一度にすべてを書き込むようです。数千万行の巨大なテーブルがある場合、常にファイルにストリーミングしたいと思います。
どうすればそれを行うことができますか?
〜1000万行のテーブルに対してこれを実行しようとしたところ、次の結果が得られました
[FATAL] failed to allocate memory
私はこれを見つけました、それがうまくいくかどうかを報告します
result = client.query("SELECT * FROM really_big_Table", :stream => true)