我的工作是卡夫卡镜头v2.2.2。我需要基于数组中对象的值进行筛选。
示例消息(为简化而编辑):
{
"payload": {
"Data": {
"something" : "stuff"
},
"foo": {
"bar": [
{
"id": "8177BE12-F69B-4A51-B12E-976D2AE37487",
"info": "more_data"
},
{
"id": "06A846C5-2138-4107-A5B0-A2FC21B9F32D",
"info": "more_data"
}
]
}
}在镜头中,这实际上是一个具有整数属性的嵌套对象.0、1等
所以我试过了,但是它抛出了一个错误:.0 appears out of place
SELECT *
FROM topic_name
WHERE payload.foo.bar.0.id = "8177BE12-F69B-4A51-B12E-976D2AE37487"
LIMIT 10我也尝试用双引号/单引号包装0,这会抛出一个500错误。
我从主题的第一条消息中复制并粘贴了UUID,所以它肯定存在。我还复制和粘贴标签,以排除排印。我认为有一些特殊的方法可以使用这样的嵌套对象访问数组,但我很难找到任何讨论它的文档或视频。
我可以确信值存储在第一个数组元素中,但是能够搜索所有对象的方法也会很棒。
发布于 2022-06-09 16:22:29
语法(如果您知道数组索引--正如我最初的问题)是:
SELECT *
FROM topic_name
WHERE payload.foo.bar[0].id = "8177BE12-F69B-4A51-B12E-976D2AE37487"
LIMIT 10虽然如果数组索引是未知的,并且您需要检查它们,我仍然很难做到这一点。我假设此时不可能在WHERE子句中不使用一系列OR语句来检查所有这些语句。
https://stackoverflow.com/questions/71774801
复制相似问题