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

在BigQuery中展平嵌套JSON数据至表格的SQL方案

BigQuery嵌套JSON展平SQL实现

针对你的需求,需要两次嵌套UNNEST来逐层展开dataset和heartRate数组,同时提取关联字段。假设你的表名为your_table,存储JSON的列名为json_data(请根据实际情况替换),对应的SQL语句如下:

SELECT
  json_data.activity AS activity,
  dataset_item.time._seconds AS time,
  -- customHeartRateZones为空数组,返回null
  NULL AS v_customheartrate,
  heart_rate_item.max AS v_heartrate_max,
  heart_rate_item.min AS v_heartrate_min,
  heart_rate_item.name AS v_heartrate_name
FROM
  your_table,
  -- 展开dataset数组
  UNNEST(json_data.dataset) AS dataset_item,
  -- 展开dataset下的heartRate子数组
  UNNEST(dataset_item.value.heartRate) AS heart_rate_item

适配STRING类型JSON列的版本

如果你的JSON列是STRING类型(而非BigQuery原生JSON类型),需要用JSON解析函数调整语句:

SELECT
  JSON_EXTRACT_SCALAR(json_data, '$.activity') AS activity,
  JSON_EXTRACT_SCALAR(dataset_item, '$.time._seconds') AS time,
  NULL AS v_customheartrate,
  JSON_EXTRACT_SCALAR(heart_rate_item, '$.max') AS v_heartrate_max,
  JSON_EXTRACT_SCALAR(heart_rate_item, '$.min') AS v_heartrate_min,
  JSON_EXTRACT_SCALAR(heart_rate_item, '$.name') AS v_heartrate_name
FROM
  your_table,
  UNNEST(JSON_QUERY_ARRAY(json_data, '$.dataset')) AS dataset_item,
  UNNEST(JSON_QUERY_ARRAY(dataset_item, '$.value.heartRate')) AS heart_rate_item

执行以上语句后,会生成你预期的结果:每个heartRate数组元素对应一行记录,同时保留activity、time等关联字段,v_customheartrate因原JSON中customHeartRateZones为空数组显示为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:52:31