LoginSignup
13
12

More than 5 years have passed since last update.

S3に置いたGzip圧縮済みCSVファイルをRubyで読み込んでみた

Posted at

※ この記事は江の島エンジニアBlogの「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.close

Gzip圧縮データを解凍する

読み込んだデータは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

これで無事読み込めました。

今回はこれでおしまいです。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12