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

Kafka Lenses SQL:如何基于数组中嵌套对象的值进行WHERE过滤

在Kafka Lenses中过滤包含指定嵌套对象的数组记录

要筛选出所有payload.engineer数组中包含id="555"的工程师对象的记录,你可以用以下两种可行的SQL写法:

方法1:使用ANY函数直接检查数组元素

这种方式更简洁,无需展开数组:

SELECT *
FROM topic_name
WHERE ANY (e IN payload.engineer WHERE e.id = '555')
LIMIT 10

ANY函数会遍历数组中的每个元素,只要有一个元素满足e.id='555'的条件,就会返回该原始记录。

方法2:通过UNNEST展开数组后过滤再去重

如果需要对数组元素做更复杂的处理,可先用UNNEST展开数组,筛选后再关联回原始记录:

SELECT DISTINCT original.*
FROM topic_name original
CROSS JOIN UNNEST(original.payload.engineer) AS t(e)
WHERE t.e.id = '555'
LIMIT 10
  • UNNEST会把每个数组元素拆成单独的行
  • 筛选出符合条件的行后,用DISTINCT避免原始记录被重复返回(因为数组中有多个元素时会生成多行)

为什么之前的写法不生效?

  • ARRAY_CONTAINS要求匹配整个对象,而不是对象中的某个字段,除非构造完全一致的对象来匹配,显然这不适用于只检查id的场景。
  • payload.engineer[*].id = "555"这种通配符写法不符合Kafka SQL的语法规范,无法直接用来判断数组中是否存在符合条件的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:31