1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCS上のgz圧縮ファイルを解凍する

Posted at

動機

GCS上に存在するcsv.gzファイルをBigQueryにtable形式でインポートしようとしたら、以下のようなエラーが発生。

Input CSV files are not splittable and at least one of the files is larger than the maximum allowed size.

どうやら4GB以上の圧縮済みCSVファイルは取り込めない様子。

なら解凍すればよくね? と思うものの、実は gsutilコマンドにはgzファイルの解凍コマンドがない。
当然、コンソール画面でも解凍は不可能。

まさか、わざわざローカルにダウンロードしてきて解凍したうえで再アップロードしろと言うことか?
流石に時間がかかりすぎるし、そもそも巨大なファイルをローカルで展開するのには無理がある......

ということで全部GCP上で完結する方法を調べてみた。

解決策

結論、ローカルじゃなくてGCEで仮想マシン使って解凍&アップロードをすればよい。

###Step.1 Google Compute Engine でVMインスタンスを立てる
作成の仕方は公式ドキュメント参照。
基本デフォルトでいい。
https://cloud.google.com/compute/docs/instances/create-start-instance?hl=ja

インスタンスを作成したらSSHをクリックして起動する。
起動時間に応じて課金が発生するので注意。
(デフォルトだと e2-medium, 2vCPU, メモリ4GBで $0.03351/hour)
https://cloud.google.com/compute/vm-instance-pricing?hl=ja

###Step2. アカウント認証
デフォルトのサービスアカウントでは権限が足りずコピーできない場合があるので、自分のアカウントでログインする。

gcloud initと入力し、あとは案内に沿って自分のアカウントを認証。

###Step.3 ファイル解凍
ファイルのコピー → 解凍 → アップロードを一括で行う。

gsutil cp gs://入力バケット名/入力ファイル名.csv.gz - | gunzip | gsutil cp - gs://出力バケット名/出力ファイル名.csv

4GBギリギリオーバーのファイルでも数分かかる。

###Step4. インスタンスを終了する
お金がかかるので忘れずに。
この後はBigQueryに取り込むなりなんなりお好みで。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?