S3に置いたGzip圧縮済みCSVファイルをRubyで読み込んでみた
      Rubyでaws-sdkを使ってS3に置いたGzip圧縮したCSVファイル読み込む手順をご紹介します。
    
    
    
  S3のキーを設定する
S3にアクセスするためにまずキーの設定を行います。
AWS.config(
  access_key_id: 'アクセスキーID',
  secret_access_key: 'シークレットアクセスキー'
)AWS::S3オブジェクトを作る
キーを設定したらAWS::S3を使ってS3からデータを読み込むクライアントを作ります。
s3 = AWS::S3.newバケットを取得する
続いてバケット名前を指定してバケットオブジェクトを取得します
bucket = s3.buckets['my-bucket']ファイルを取得する
次はバケット内のファイルを取得します。
file = bucket.objects['books.csv.gz']ファイルを読み込む
取得したファイルをパイプストリームに書き込みます。
reader, writer = IO.pipe
file.read { |chunk| writer.write chunk }
writer.closeGzip圧縮データを解凍する
読み込んだデータはGzip圧縮してあるのでGzipReaderを使って解凍します。
require 'zlib'
text = Zlib::GzipReader.new(reader).read
reader.closeおまけ: Gzip圧縮した文字列を解凍する
上の例のように圧縮データはストリームに書き込むのが基本ですが、サイズが小さければ連結してStringIO経由で解凍してもOKです。
data = ''
file.read { |chunk| data << chunk }
text = Zlib::GzipReader.new(StringIO.new(data)).read解凍したCSVデータを読み込む
解凍したデータはCSV形式になっているのでCSV.parseで読み込みます。
CSV.parse(text).each do |row|
  puts row.inspect
endこれで無事読み込めました。
今回はこれでおしまいです。
