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

如何在BigQuery SQL中实现动态键的Map类型JSON输出?

如何在BigQuery中生成带动态键的JSON对象

当然可以实现!当你需要从动态的键值对数据生成单个JSON对象时,BigQuery的OBJECT_AGG函数就是完美的解决方案——它专门用来聚合键值对构建动态对象,正好对应你想要的类似Avro Map的效果。

具体实现步骤

针对你给出的示例数据:

-- 源数据
SELECT * FROM (
  SELECT "key1" as key, "val1" as val UNION ALL 
  SELECT "key2" as key, "val2" as val
)

只需要用OBJECT_AGG(key, val)聚合所有键值对,再通过TO_JSON_STRING转成JSON字符串即可:

SELECT TO_JSON_STRING(OBJECT_AGG(key, val)) AS dynamic_json
FROM (
  SELECT "key1" as key, "val1" as val UNION ALL 
  SELECT "key2" as key, "val2" as val
)

执行结果

运行上面的SQL后,你会得到完全符合预期的输出:

{"key1": "val1", "key2": "val2"}

补充说明

  • 如果源数据中有重复的键,OBJECT_AGG会保留最后出现的那个键值对。比如下面的查询:
    SELECT TO_JSON_STRING(OBJECT_AGG(key, val)) AS dynamic_json
    FROM (
      SELECT "key1" as key, "val1" as val UNION ALL 
      SELECT "key1" as key, "val2" as val
    )
    
    结果会是{"key1": "val2"}。
  • 对比固定键的场景:STRUCT适合键名提前确定的情况,而OBJECT_AGG则完全适配键名来自数据列的动态场景,两者搭配可以覆盖绝大多数JSON生成需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:32:50