跳到主要内容

大数据处理:JSON To BigQuery模式 — Numio

根据示例 JSON 生成 Google BigQuery 表结构(由 name、type、mode 字段组成的 JSON 数组)。数组变为 REPEATED,嵌套对象变为 RECORD,数组中的所有元素会合并为一个结构。

根据示例事件或 API 响应,起草用于 bq load 或 bq mk --schema 的 schema 文件。

JSON

Big Query Schema

适用场景

  • 根据示例事件或 API 响应,起草用于 bq load 或 bq mk --schema 的 schema 文件。
  • 建表前确认日志记录中的嵌套对象和数组如何映射为 RECORD 和 REPEATED 列。

使用方法

  1. 将一个 JSON 对象或示例记录数组粘贴到左侧编辑器,或用加载文件按钮打开 UTF-8 文件。
  2. 查看右侧的 schema,检查每个字段选用的类型,特别是日期、数字字符串和数组。
  3. 复制 JSON 数组,按需调整类型或将 mode 设为 REQUIRED,然后保存为 schema 文件。

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 schema 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",
…

功能与限制

只有形如 ISO 日期时间(2026-01-05T10:00:00Z)的字符串才会被定为 TIMESTAMP,纯 YYYY-MM-DD 定为 DATE;其他字符串(包括 "02139" 这样的数字字符串)一律为 STRING。

null 值或空数组不带类型信息,除非其他记录提供了值,否则会变为 STRING(NULLABLE 或 REPEATED)。不会生成 REQUIRED 模式。

字段会在所有数组元素间合并:INTEGER 与 FLOAT 合并为 FLOAT,其他类型冲突则回退为 STRING。

转换在浏览器中进行,不会上传任何内容。

FAQ

为什么时间戳列是 TIMESTAMP 而不是 DATETIME?

生成器不区分带时区和本地的日期时间,任何 ISO 日期时间字符串都会变为 TIMESTAMP。如果值不带时区,请手动改为 DATETIME。

可以粘贴记录数组吗?

可以。根数组中的对象会合并为一个 schema,只在部分记录中出现的字段也会包含在内。不解析 NDJSON(每行一个对象);请用 [ ] 包起来并用逗号分隔各行。

null 值是什么类型?

没有其他示例为该字段提供值时,类型为 NULLABLE STRING,如示例中的 coupon。如果该列是数值或 RECORD,请提供非 null 的示例,或手动修改类型。

规范与参考资料