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コマンドはこれまで知らなくて、データ取り込みをやる必要が出た際に同僚から教わって知り、「ほぇ~」となったので備忘を兼ねて放出。
この記事が気に入ったらサポートをしてみませんか?