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

Athena/Presto查询:筛选嵌套JSON数组含country=US的行

解决Athena筛选数组中包含指定键值行的问题

问题场景

执行查询获取嵌套数组结果:

SELECT element_at(col_name,1).entities FROM "db_name"."the_table" limit 10;

返回结果示例:

[{country=US,content=content},{country=DE,content=content},{country=GB,content=content}]
[]
[{country=HK,content=content},{country=IN,content=content},{country=GB,content=content}]
[]

尝试用any_match筛选存在country=US的行时报错“不是行”:

SELECT * FROM "db_name"."the_table" WHERE any_match(element_at(col_name,1).entities, e-> e.country= 'US') limit 10;

错误原因

数组中的元素是Map类型而非行(Struct)类型,无法用.语法访问字段,必须使用Map的键访问方式['key']。

正确实现方法

方法1:使用any_match结合Map键访问

SELECT * 
FROM "db_name"."the_table" 
WHERE any_match(element_at(col_name, 1).entities, e -> e['country'] = 'US') 
LIMIT 10;

any_match会遍历数组内的每个Map元素,判断是否存在country键值为US的元素,满足条件则返回该行。

方法2:使用transform+contains

SELECT * 
FROM "db_name"."the_table" 
WHERE contains(
    transform(element_at(col_name, 1).entities, e -> e['country']),
    'US'
)
LIMIT 10;

先通过transform提取数组中所有元素的country值生成新数组,再用contains判断新数组是否包含US,以此筛选目标行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:16:08