動機
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に取り込むなりなんなりお好みで。