2

小さな 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)
4

2 に答える 2