从 S3 逐行传输大文件

zas*_*ail 7 ruby io heroku amazon-s3 large-files

我在 s3 中有一些 10gb csv 文件,我想用它们来为我的数据库播种。我正在 Heroku 上运行 RoR 应用程序,但我不知道如何逐行流式传输 csv 来处理它,因为它太大而无法放入内存,而且我无法使用 File.open 访问外部文件。

我研究过使用 Tempfile 一次传输字节,但它们与新行不匹配,并且在 Ruby 中重建它很困难。

谢谢你!

Dav*_*dge 2

您可以读取流,如 API 文档中所述:http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html

s3 = AWS::S3.new
large_object = s3.buckets['my-bucket'].objects['key'] # no request made

File.open('output', 'wb') do |file|
  large_object.read do |chunk|
    file.write(chunk)
  end
end
Run Code Online (Sandbox Code Playgroud)

您还可以用作range读取一系列字节的选项。

http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#read-instance_method