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

AWS Athena使用Unnest后去重:过滤数组避免重复行问题

解决数组过滤时避免原始记录重复的问题

你当前用CROSS JOIN UNNEST展开数组后过滤,会把原记录和数组中每个符合条件的元素配对,导致同一条原始记录生成多行结果。要保留原始记录的唯一性,只需要判断数组中是否存在满足条件的元素即可,不需要展开数组。

以下是几种可行的写法:

方法1:用EXISTS子查询判断

这种方式兼容性较好,适用于大多数支持JSON和数组操作的SQL引擎:

SELECT * 
FROM "events-data"
WHERE EXISTS (
    SELECT 1 
    FROM UNNEST(CAST(json_extract(attributes, '$["array_int"]') AS array<int>)) AS t(val)
    WHERE val > 9
);

方法2:用ANY操作符简化查询

如果你的SQL引擎支持数组的ANY操作符(比如PostgreSQL),可以用更简洁的写法:

SELECT * 
FROM "events-data"
WHERE 9 < ANY(CAST(json_extract(attributes, '$["array_int"]') AS array<int>));

方法3:针对JSON数组的原生函数(以BigQuery为例)

如果是BigQuery这类有专门JSON数组处理函数的引擎,可以直接用JSON_EXTRACT_ARRAY:

SELECT * 
FROM "events-data"
WHERE EXISTS (
    SELECT 1 
    FROM UNNEST(JSON_EXTRACT_ARRAY(attributes, '$.array_int')) AS val
    WHERE val > 9
);

这些写法都会只返回符合条件的原始记录,不会因为数组中有多个符合条件的元素而生成重复行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:14:51