BigQueryのスキーマを変更したい場合に、bq mk
でテーブルを新規作成して元のテーブルから全データ再投入するしかないと思っているBiqQuery初心者1向けの記事。
BigQueryのスキーマは条件つきで後から変更できる
BigQueryでは、既に入っているデータを消すことなくスキーマの変更ができます。ただし、変更内容には次のような制約があります。
- NULLABLE モードの新たな列を追加する (追加した列の値は全てNULLになる)
- 既存の列のモードを REQUIRED から NULLABLE にする
この条件に当てはまらない変更をしたい場合は頑張る必要があります2。
詳細は公式の文書に書いてあります。
BigQueryのスキーマを後から変更する手順
まず現在のスキーマをJSON形式で取得します。
$ bq show --schema --format=prettyjson [GCPプロジェクト名]:[データセット名].[テーブル名] > schema.json
このJSONファイルを編集してスキーマを書き換えます。列の追加はファイル末尾でなくとも好きな場所に追加することができます。
ファイル編集後にスキーマ変更を反映します。
$ bq update [GCPプロジェクト名]:[データセット名].[テーブル名] schema.json
Table '[GCPプロジェクト名]:[データセット名].[テーブル名]' successfully updated.
これで完成です。あとはデータを投入しましょう。
-
数ヶ月前の自分がそうでした… ↩