You need to enable JavaScript to run this app. Athena拼接多列JSON:如何用原列名替代默认的field类字段键
优惠活动
大模型
产品
解决方案
定价
更多

Athena拼接多列JSON:如何用原列名替代默认的field类字段键

问题根因

你之前写的select id,(name,age,city) as details from students 最终返回带field0/field1/field2的结构,核心原因是数据库会把括号包裹的多列组合解析为匿名复合行类型。这类类型没有绑定明确的列名映射规则,数据库会按字段顺序自动生成占位键名,不会自动继承原表的列名作为JSON对象的键。

正确实现方式

要生成保留原列名的JSON结构,不能依赖匿名行类型的自动解析,需要使用数据库内置的JSON构造函数,显式指定JSON对象的键与对应列的映射关系:

  • PostgreSQL、openGauss、瀚高等数据库,使用json_build_object函数实现:
    SELECT
      id,
      json_build_object('name', name, 'age', age, 'city', city) AS details
    FROM students;
    
  • MySQL 5.7+、8.0、MariaDB等数据库,使用对应的json_object函数实现,映射逻辑完全一致:
    SELECT
      id,
      json_object('name', name, 'age', age, 'city', city) AS details
    FROM students;
    
输出效果

上述查询生成的details列,会严格按照你传入的键名组织内容,不会出现自动生成的占位字段名,最终结构完全匹配预期:{name: 对应行的name值, age: 对应行的age值, city: 对应行的city值}。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 09:06:07