見出し画像

bq loadで解決。GoogleCloudStorage→BigQueryへのデータ取り込み

GCSにcsvがあるとして、BigQueryのテーブルにする。
そういう処理について。

bq loadで解決

解決策の1つはbqコマンド。
中でもbq load
csvのデータから、1行目の読み飛ばし、型の自動検出といったあたりを引数にして取り込む例は以下。

bq load --source_format=CSV --skip_leading_rows 1 --autodetect {プロジェクト名}:{データセット名}.{テーブル名} {GCSのURI}

テーブルについては、
存在しないテーブルなら、テーブル自体を新規作成。
既に存在する名前のテーブルならappend(SQL的にはunion)
の処理になる。
write truncateしたいときは別途オプション(--replace)で指定可能。
bq loadの骨子は以下↓

bq load [取り込み先テーブル名] [取り込み元] [スキーマ指定]

所要時間

参考までに、180万行64列(約1GB)のcsvの取り込み時間は55秒ほど。

複数のcsvをunionして1つのテーブルとして取り込みたい場合

同一形式のcsvがバケット内に数十~数百あるとして、

!gsutil ls  gs://{バケット名} > {保存するファイル名 csv_listなど}

↑で、とりあえず指定のバケット内のcsvを全部取り出して格納
その後↓のような.shファイルを作成して実行とかにすれば対象バケット内の複数のcsv全部を取り込める。

#!/bin/bash
while read line
do
    echo ${line}
    bq load --source_format=CSV --skip_leading_rows 1 --autodetect {プロジェクト名}:{データセット名}.{テーブル名} {GCSのURI}
done < {保存するファイル名 csv_listなど}

bqコマンドはこれまで知らなくて、データ取り込みをやる必要が出た際に同僚から教わって知り、「ほぇ~」となったので備忘を兼ねて放出。

この記事が気に入ったらサポートをしてみませんか?