最近BigQueryを使う機会があって、データのインポートの仕方がbq loadの他にもいろいろあったことが意外だったので調べたぶんだけまとめてみました。
Web UIからファイル指定で追加できるようになっていたりINSERT文が使えるようになっていたりするのが、ちょっと試すときとかにすごい便利です。
テーブル作成時に登録する
テーブルを作るときに登録する方法です。
「テーブルの作成」で、「テーブルの作成元」プルダウンメニューを変更することで初期データが登録できます。
CSVファイルをアップロードして登録するときはこんな感じで。
ただ、ここでCSVファイルの方にヘッダが設定されていると、それがデータとして読み込まれてしまいエラーになってしまいます。
id,name
1,りんご
2,みかん
3,いちご
中身がこういうファイルとかですね。
その場合はヘッダ行を削除したファイルを作るか、「詳細オプション > スキップするヘッダー行」の数値を調整します。
あと、CSVファイルはUTF-8である必要があります…SJISテキストだとこうです。
テーブルに追加する
「テーブルを作成」で、すでにあるテーブル名を指定し、「詳細オプション > 書き込み設定」を「テーブルに追加する」にすることで、既存のテーブルにデータファイルを追加することができます。
その際には「スキーマ」の「自動検出」にチェックを入れておくと、既存のテーブルのものを使ってくるようで楽です。
bq loadで登録する
bqコマンドを使用する方法です。テーブル名とデータファイル、スキーマを定義したJSONが必要です。
ローカルのファイルを指定する場合はそのまま。
$ bq load --skip_leading_rows=1 sample.fruits fruits.csv fruits_schema.json
Upload complete.
Waiting on bqjob_r480de7ee_000001675ff3da58_1 ... (0s) Current status: DONE
Google Cloud Storageに置いてあるファイルなどもいけます。
$ bq load --skip_leading_rows=1 sample.fruits gs://(バケット名)/fruits.csv fruits_schema.json
Waiting on bqjob_r3b7e2b3d_000001675ff98507_1 ... (1s) Current status: DONE
ストレージ上ではgzip圧縮されたファイルも指定できるため、テキストデータをそのまま使うより効率よくアップロードできます。
INSERT文を使う
BigQueryからそのままINSERT文が使えます。
INSERT INTO (データセット).fruits (id, name) VALUES (100, 'バナナ')
こちらはStandard SQLから有効になっているようです。
INSERT文が使えるので、SELECTからINSERTも使えるようになっています。
INSERT INTO (データセット).fruits (id, name) SELECT id, name FROM (データセット).fruits2
その他
登録できるファイル形式やオプションなどは公式ドキュメントが詳しいです。
参考: