如何使用AWS Athena提取嵌套JSON花括号中的指定字段值
实现方法
你当前写的查询仅返回了attributeDetails整个嵌套对象,没有进一步钻取到目标字段,根据表结构定义的不同,分两种场景写查询即可:
场景1:建表时已映射JSON嵌套结构
如果你当前执行select ID, address.attributeDetails FROM "TableName"不报错,说明建表时已经通过JSON SerDe把嵌套结构映射成了结构化列,直接通过点号逐级访问字段即可。要提取Attribute4值为RSQ的对应数据,语句如下:
SELECT ID, address.attributeDetails.Attribute4 AS Attribute4_value FROM "TableName" -- 仅需要过滤值为RSQ的记录时保留WHERE条件,全量提取字段可删除 WHERE address.attributeDetails.Attribute4 = 'RSQ'
注意:Athena底层基于Trino(原Presto)引擎,JSON字段名大小写敏感,写查询时字段名要和原始JSON里的key完全一致,比如这里的
Attribute4首字母大写,就不能写成小写的attribute4,否则会取不到值。
场景2:原始JSON存在单个字符串列中
如果表没有做嵌套结构映射,整条JSON存储在单个STRING类型的列(常见于原始日志表,列名一般为raw_data、json_payload这类),需要用内置JSON解析函数提取字段,语句如下:
SELECT json_extract_scalar(raw_data, '$.ID') AS ID, json_extract_scalar(raw_data, '$.address.attributeDetails.Attribute4') AS Attribute4_value FROM "TableName" WHERE json_extract_scalar(raw_data, '$.address.attributeDetails.Attribute4') = 'RSQ'
注意事项:
- 取字符串、数值这类普通标量值用
json_extract_scalar,如果要取嵌套对象、数组这类复杂结构才用json_extract,用错函数会返回带转义符的序列化字符串,影响后续处理 - JSON路径的写法同样严格区分大小写,路径层级和原始JSON结构完全对应即可
系统学习参考方向
不需要找零散的第三方教程,优先看官方公开的文档内容即可:
- Athena官方文档中「处理JSON数据」章节,覆盖JSON类表的建表配置、不同SerDe的使用差异、嵌套/数组结构的处理规则
- Athena官方文档中「Trino函数参考-JSON函数」部分,所有JSON处理相关的函数入参、返回值、使用示例都有明确说明
- Trino官方SQL语法参考,Athena的查询语法几乎完全兼容Trino语法,复杂查询、窗口函数、嵌套类型处理的规则都可以对照参考
内容的提问来源于stack exchange,提问作者Ruby
相关产品推荐
相关产品推荐

