我的数据如下:
event_A: { [-]
processingTimeMillis: 2178
event_A_recipients: [ [-]
id1,
id2,
id3,
id4,
]
}
eventType: event_A
event_B: { [-]
processingTimeMillis: 2178
event_B_recipients: [ [-]
id1,
id3,
]
}
eventType: event_B
event_B: { [-]
processingTimeMillis: 2178
event_B_recipients: [ [-]
id2
]
}
eventType: event_B
上面是我的源数据的示例。事件有两种类型,event_A 和 event_B(json 数据)。我试图列出所有与 event_A 关联的 id,但不列出与 event_B 关联的 id。我尝试使用 spath 和子搜索,但到目前为止没有任何效果。
以上数据应该是id4。
好吧,这看起来很棘手(当然,上次我说其他人也来了,回答起来更容易)。我的做法是:
transaction
将所有事件合并为一个。mvexpand
复制到A的id的副本上。mvappend
使用A的id的扩展值来复制B的id。 (如果已经存在,则不会添加)null()
或 A 的 id 扩展值的值,具体取决于 mvcount
。stats
将这些值放回到一个事件中这是一个随处运行的示例:
| makeresults
| eval JSON="{\"event_A\":{\"processingTimeMillis\":\"2178\",\"event_A_recipients\":[\"id1\",\"id2\",\"id4\"]},\"eventType\":\"event_A\"}|{\"event_B\":{\"processingTimeMillis\":\"2178\",\"event_B_recipients\":[\"id1\",\"id3\"]},\"eventType\":\"event_B\"}|{\"event_B\":{\"processingTimeMillis\":\"2178\",\"event_B_recipients\":[\"id2\"]},\"eventType\":\"event_B\"}"
| eval JSON=split(JSON,"|")
| mvexpand JSON
| spath input=JSON
| rename event_A.event_A_recipients{} as A
| rename event_B.event_B_recipients{} as B
| eval id=""
| transaction id
| eval A_copy=A
| mvexpand A_copy
| eval C=mvdedup(mvappend(B,A_copy))
| eval matches=if(mvcount(C)>mvcount(B),null(),A_copy)
| table _time A B matches
| stats values(*) as * by _time