本文へスキップ

JSONからBigQueryスキーマへの変換 — Numio

サンプル JSON から Google BigQuery のテーブルスキーマ(name、type、mode フィールドを持つ JSON 配列)を生成します。配列は REPEATED、ネストしたオブジェクトは RECORD になり、配列の全要素は 1 つのスキーマにマージされます。

サンプルのイベントや API レスポンスから、bq load や bq mk --schema 用のスキーマファイルの下書きを作る。

JSON

Big Query Schema

こんなときに使えます

  • サンプルのイベントや API レスポンスから、bq load や bq mk --schema 用のスキーマファイルの下書きを作る。
  • テーブル作成前に、ログレコード内のネストしたオブジェクトや配列が RECORD 列・REPEATED 列にどう対応するかを確認する。

使い方

  1. JSON オブジェクト 1 つ、またはサンプルレコードの配列を左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。
  2. 右側のスキーマを読み、各フィールドに選ばれた型を確認します。特に日付、数字の文字列、配列に注意してください。
  3. JSON 配列をコピーし、必要に応じて型を調整したり mode を REQUIRED にしたりして、スキーマファイルとして保存します。

JSON サンプルオブジェクト

{
  "order_id": 1024,
  "zip": "02139",
  "coupon": null,
  "created_at": "2026-01-05T10:00:00Z",
  "items": [{ "sku": "A1", "qty": 2 }, { "sku": "B7", "price": 4.5 }]
}

BigQuery スキーマ JSON

[
  {
    "name": "order_id",
    "type": "INTEGER",
    "mode": "NULLABLE"
  },
  {
    "name": "zip",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "coupon",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "created_at",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
  },
  {
    "name": "items",
    "type": "RECORD",
…

仕様と制限

文字列が TIMESTAMP になるのは ISO の日時(2026-01-05T10:00:00Z)の形の場合だけで、DATE になるのは YYYY-MM-DD のみの場合だけです。"02139" のような数字の文字列を含め、それ以外は STRING のままです。

null 値や空配列は型の情報を持たないため、他のレコードが値を与えない限り STRING(NULLABLE または REPEATED)になります。REQUIRED モードは生成されません。

フィールドは配列の全要素にわたってマージされます。INTEGER と FLOAT は FLOAT になり、それ以外の型の衝突は STRING にフォールバックします。

変換はブラウザ内で行われ、何もアップロードされません。

FAQ

タイムスタンプの列が DATETIME ではなく TIMESTAMP になるのはなぜですか?

生成器はタイムゾーン付きとローカルの日時を区別せず、ISO 日時の文字列はすべて TIMESTAMP にします。値にタイムゾーンがない場合は手動で DATETIME に変更してください。

レコードの配列を貼り付けられますか?

はい。ルートのオブジェクト配列は 1 つのスキーマにマージされるため、一部のレコードにしかないフィールドも含まれます。NDJSON(1 行 1 オブジェクト)は解析されません。各行をカンマで区切って [ ] で囲んでください。

null 値の型はどうなりますか?

他のサンプルがそのフィールドに値を与えない場合、例の coupon のように NULLABLE STRING になります。列が数値や RECORD なら、null 以外のサンプルを用意するか型を編集してください。

仕様を確認する