You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用优雅的BigQuery SQL将JSON数据转换为结构化表格?

问题描述

我有一个BigQuery表,仅包含一列一行数据:

Json
{'A':{'min':0, 'max':10},'B':{'min':1, 'max':15},'C':{'min':10, 'max':18}}

需要将该JSON数据转换为如下结构化表格:

Namemin_valuemax_value
A010
B115
C1018

目前我使用以下SQL实现,但希望有更优雅的写法:

SELECT 'A' AS name, 
    JSON_EXTRACT(Json, "$.A.min") as min_value, 
    JSON_EXTRACT(Json, "$.A.max") as max_value
FROM table_name
UNION ALL 
SELECT 'B' AS name, 
    JSON_EXTRACT(Json, "$.B.min") as min_value, 
    JSON_EXTRACT(Json, "$.B.max") as max_value
FROM table_name
UNION ALL 
SELECT 'C' AS name, 
    JSON_EXTRACT(Json, "$.C.min") as min_value, 
    JSON_EXTRACT(Json, "$.C.max") as max_value
FROM table_name
更优雅的实现方案

推荐使用BigQuery的JSON_KEYS配合UNNEST函数实现动态解析,无需重复编写UNION ALL语句,代码更简洁且扩展性更强(后续JSON新增顶层键时无需修改SQL):

SELECT
  key AS Name,
  CAST(JSON_EXTRACT_SCALAR(Json, CONCAT('$.', key, '.min')) AS INT64) AS min_value,
  CAST(JSON_EXTRACT_SCALAR(Json, CONCAT('$.', key, '.max')) AS INT64) AS max_value
FROM
  table_name,
  UNNEST(JSON_KEYS(Json)) AS key

关键函数说明

  • JSON_KEYS(Json):提取JSON对象的所有顶层键(即示例中的'A'、'B'、'C')
  • UNNEST(...):将提取出的键列表拆分为多行,完成行转列的转换
  • JSON_EXTRACT_SCALAR:直接提取JSON中的标量值,相比JSON_EXTRACT更高效,再通过CAST转换为整数类型(可根据实际需求调整数据类型)

注:如果你的JSON是单引号格式(非标准JSON),BigQuery仍可兼容,但建议优先使用双引号的标准JSON格式以避免潜在解析问题。

内容的提问来源于stack exchange,提问作者CYC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:25:02