如何将JSON Schema转换为BigQuery Schema?有无对应工具?
JSON Schema 转 BigQuery Schema 的可行方案
现成工具
- jsonschema2bq(Python库):专门针对JSON Schema到BigQuery Schema的转换,支持嵌套结构、数据类型自动映射(如JSON
integer→BigQueryINT64,JSONobject→BigQueryRECORD),还能根据JSON Schema的required关键字设置BigQuery字段的mode(必填字段设为REQUIRED,其余默认NULLABLE)。通过pip安装后,调用API即可完成转换。 - BigQuery CLI 自动推导:若有符合目标JSON Schema的样本数据文件,可先用
bq load命令创建临时表并让BigQuery自动检测Schema,再通过bq show --schema --format=prettyjson <数据集>.<表名>导出标准BigQuery Schema格式。适合有样本数据的场景。 - Apache Beam/Dataflow:在数据流处理场景中,可利用Apache Beam的Schema转换能力,编写简单逻辑将JSON Schema映射为BigQuery Schema,适合批量或实时数据管道的Schema同步需求。
自定义转换实现
如果需要定制化处理(比如添加policyTags、自定义数据类型映射),可自行编写脚本实现核心规则:
- 数据类型映射:
- JSON
string→ BigQuerySTRING - JSON
integer→ BigQueryINT64 - JSON
number→ BigQueryFLOAT64 - JSON
boolean→ BigQueryBOOL - JSON
object→ BigQueryRECORD - JSON
array→ 对应元素类型 +REPEATED模式
- JSON
- 模式(mode)配置:JSON Schema
required数组中的字段设为REQUIRED,其余为NULLABLE;数组类型默认REPEATED。 - 嵌套结构递归解析:遍历JSON Schema的
properties,递归生成BigQuery的fields数组。
转换示例
源JSON Schema片段
{ "type": "object", "properties": { "user_id": {"type": "integer", "description": "唯一用户标识"}, "user_name": {"type": "string"}, "hobbies": {"type": "array", "items": {"type": "string"}} }, "required": ["user_id"] }
转换后的BigQuery Schema片段
[ { "name": "user_id", "type": "INT64", "mode": "REQUIRED", "description": "唯一用户标识" }, { "name": "user_name", "type": "STRING", "mode": "NULLABLE" }, { "name": "hobbies", "type": "STRING", "mode": "REPEATED" } ]
内容的提问来源于stack exchange,提问作者Eric Kolotyluk
相关产品推荐
相关产品推荐

