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
相关产品推荐
相关产品推荐

