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

如何在Amazon Athena中获取JSON的倒数第二个键?

解决Athena中JSON路径负索引报错问题

错误原因

Athena的json_extract_scalar所用的JSON路径语法不支持负索引(如$[-1]),它基于Simba JDBC驱动的JSON路径实现,遵循的规范不包含该特性,因此直接使用负索引会触发INVALID_FUNCTION_ARGUMENT错误。

解决方案

根据你的JSON结构(数组/对象)选择对应方法:

情况1:JSON是数组,取倒数第二个元素

先通过json_array_length获取数组长度,再计算倒数第二个元素的索引(数组从0开始,索引为长度-2):

SELECT 
    CASE WHEN json_array_length(json_column) >= 2
         THEN json_extract_scalar(json_column, concat('$[', json_array_length(json_column)-2, ']'))
         ELSE NULL 
    END AS second_last_element
FROM table_name;

添加CASE语句是为了避免数组长度不足2时出现负索引错误。

情况2:JSON是对象,取倒数第二个键

注意:JSON对象的键在规范中是无序的,以下方法依赖Athena对键的存储排序,仅在你明确键有固定顺序时使用:
先将JSON对象转为Map,通过map_keys提取键数组,再取倒数第二个元素:

SELECT 
    CASE WHEN cardinality(map_keys(json_parse(json_column))) >=2 
         THEN map_keys(json_parse(json_column))[cardinality(map_keys(json_parse(json_column)))-2]
         ELSE NULL 
    END AS second_last_key
FROM table_name;

验证说明

你之前使用$.status能正常查询,是因为这种明确指定键名的路径符合Athena的JSON语法规范,属于简单的对象属性访问,不存在语法兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:30:47