大数据处理: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 列。
使用方法
- 将一个 JSON 对象或示例记录数组粘贴到左侧编辑器,或用加载文件按钮打开 UTF-8 文件。
- 查看右侧的 schema,检查每个字段选用的类型,特别是日期、数字字符串和数组。
- 复制 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 的示例,或手动修改类型。