BigQueryにbqコマンドでテーブル作成・スキーマ変更する

はじめに

BigQueryにbqコマンドでテーブル作成・データ投入・スキーマ変更する。

ネストされたデータも扱いたいので、今回はjsonファイルを読み込むようにする

CSVは現段階でネストされたデータのimportをサポートされていない

CSV ファイルはネストされたデータや繰り返しデータに対応していません。

https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv

ちょうどいいサンプルデータ( https://gist.github.com/isdyy/5072792 )を置いてくださる方がいたので、それを拝借。

準備

https://gist.github.com/isdyy/5072792

にあるように2つのデータを用意する。1つはスキーマ。もう1つはデータ

  • スキーマ

     
  • データ

テーブルのみ作成

ブラウザ上で以下の通り作成されている

また、bq showコマンドでスキーマを確認できる

データの投入

無事投入された。適切にネストもされている。

テーブル作成+データ投入

スキーマ作成と同時に、データの投入も可能

もちろん結果は同じ

データのみをつかって、テーブルを自動作成

 --autodetect オプションを使う。

スキーマを変更する

nested01.fields.jsonを以下の通り変更

スキーマが追加。

今まで投入されていたデータに追加されたカラムはnullが入る。

新しいスキーマに、旧データを投入

(スキーマは変更したが、投入するデータは以前と同じ)

エラーにはならず、単純に新しいスキーマにはnullが入る

新スキーマに沿ったデータを投入

投入された

テーブル作成

jsonファイルを作成する

jsonファイルを用意して、bqコマンドで作成する

Table ‘***:logs.mytable’ successfully created.

と表示されたら成功。

ブラウザで確認すると、問題なく作成されている。

スキーマ変更

 

lesson_date2を追加し、bq update コマンドを実施

Table ‘****:logs.mytable’ successfully updated.

となれば成功

無事カラムが追加された

テーブル定義をdumpする

当然このformatを読み込ませることができる

パーティションテーブルを作成する

JSONはスキーマ情報のみ。パーティションテーブルの指定はbqコマンドのオプションで行う。

パーテョションテーブル作成

Table ‘****:logs.cccc’ successfully created.