Athena(Trino SQL)如何用点标记法解析带引号的JSON字段?
原因说明
你遇到的报错是因为Athena(Trino)的点标记法仅支持STRUCT/ROW类型的字段访问,仅当表结构中显式定义了对应层级的ROW结构时才能正常使用。当JSON字段的键带双引号时,Athena不会将该层级识别为ROW类型,因此点标记法失效。
无需修改JSON和表结构的解决方案
直接使用Athena内置的JSON解析函数即可,兼容性更强,不受键是否带引号的影响:
方案1:提取标量值(字符串、数字、布尔值等)
使用JSON_EXTRACT_SCALAR函数,直接返回对应字段的原始值:
SELECT JSON_EXTRACT_SCALAR(document1, '$.a.text') AS value1 FROM your_table_name;
方案2:提取JSON对象/数组
如果需要返回JSON结构而非纯标量值,使用JSON_EXTRACT函数:
SELECT JSON_EXTRACT(document1, '$.a') AS a_object FROM your_table_name;
适用场景说明
上述两个函数对document1为JSON类型、或STRING类型存储的JSON文本均生效,无需调整原有表结构和JSON数据格式。
内容的提问来源于stack exchange,提问作者JosephDoggie
相关产品推荐
相关产品推荐

