BigQueryにJSONファイルをローカル環境のコマンドラインからアップロードする


はじめに

BigQueryにデータを送る方法として「実行環境:ローカルファイル」「データ形式:JSON」「実行ツール:コマンドライン」の組み合わせを実施する。

  • 送信元のパターン
  • データ形式のパターン
    • JSON ← コレ
    • CSV
    • その他
  • 実行ツールのパターン
    • コマンドライン ← コレ
    • スクリプト
    • BigQueryのUI(コンソール画面) ...テーブルの新規作成時のみ可

STEP1: 送信するレコードとそのスキーマのデータをJSONファイルで作成

レコードのJSONの形式は特殊で、「行単位で完結している JSON ファイル[参考記事1]」。

sample-records.json
{"sample_column_1":"masato", "sample_column_2":1}
{"sample_column_1":"tarou", "sample_column_2":2}
{"sample_column_1":"marou", "sample_column_2":3}
sample-schema.json
[
  {
    "name": "sample_column_1",
    "type": "STRING"
  },
  {
    "name": "sample_column_2",
    "type": "INTEGER"
  }
]

STEP2: SDKインストール

SDKをインストールすることで、指定されたコマンドを入力すれば対応する操作がGoogleクラウド上で可能になる(公式ドキュメント)。

STEP3: BigQueryのデータセットの作成


※コンソール画面のほうが分かりやすいが、コマンドラインを使うなら公式ドキュメントを参照

STEP4: SDKのプロジェクトを指定する

送信したいBigqueryのデータセットがあるプロジェクトが、現在SDKで設定しているプロジェクトと異なる場合、送信先が見つからないためエラーになる。したがって、以下SDKのコマンドで現在のプロジェクトを指定する(公式ドキュメント)
$ gcloud config set project myProject

STEP5: 送信先と送信データを指定してSDKでコマンドを実行する

$ bq load --source_format=NEWLINE_DELIMITED_JSON sample-dataset.sample_table sample-records.json sample-records.json
(公式ドキュメント)

行1~3は新規追加したときのレコードであり、このときテーブルも作成された。同じコマンドを再度実行してテーブルに追加されたレコードが行4~6。つまりテーブルの作成とテーブルへのデータ追加どちらにも対応したコマンドと言える。
※[参考記事1]で紹介されているのを見てloadコマンドをinsertに変えたところ、こちらでもデータを登録することができた。ただし、相違点を現段階で詳しく調べてはいない。

参考

[1] BigQuery でデータ追加が意外と難しかったのでメモ - @ta_ta_ta_miya
[2] Google BigQuery の JSON投入を軽く試す - isdyy/google-bigquery-json.md

背景

↓をJSONでやってみようかと思って。


何かあればお手数ですが、本記事か以下アカウントでお知らせください

Qiitaアカウント
Twitterアカウント