【发布时间】:2013-07-15 02:02:26
【问题描述】:
我使用一个小的 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
我找到了this,如果成功了会反馈的
result = client.query("SELECT * FROM really_big_Table", :stream => true)
【问题讨论】:
-
是从数据库读取的问题,还是写入 CSV 文件的问题,或两者兼而有之?
-
好问题,我早上去看看