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

如何在AWS Athena中查询Parquet格式表的结构体数组列符合多键值条件的记录

数组结构体查询实现方案
  • 核心逻辑:分别判断labels数组中是否同时存在两个符合要求的结构体元素,两个条件取交集即可筛选出目标记录。

1. Spark SQL / 新版本Hive 通用写法

SELECT *
FROM reports
WHERE 
  -- 判断是否存在key=name且value=cat的元素
  EXISTS (
    SELECT 1 
    FROM UNNEST(labels) AS label 
    WHERE label.key = 'name' AND label.value = 'cat'
  )
  -- 判断是否存在key=owner且value=meow的元素
  AND EXISTS (
    SELECT 1 
    FROM UNNEST(labels) AS label 
    WHERE label.key = 'owner' AND label.value = 'meow'
  );

老版本Hive(不支持UNNEST语法)可用LATERAL VIEW写法实现:

SELECT DISTINCT r.*
FROM reports r
LATERAL VIEW EXPLODE(labels) l1 AS label1
LATERAL VIEW EXPLODE(labels) l2 AS label2
WHERE 
  label1.key = 'name' AND label1.value = 'cat'
  AND label2.key = 'owner' AND label2.value = 'meow';

2. Presto / Trino 简化写法

利用内置的ARRAY_EXISTS函数无需展开数组,执行效率更高:

SELECT *
FROM reports
WHERE 
  ARRAY_EXISTS(labels, x -> x.key = 'name' AND x.value = 'cat')
  AND ARRAY_EXISTS(labels, x -> x.key = 'owner' AND x.value = 'meow');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:18:04