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
相关产品推荐
相关产品推荐

