Siddhi CEP问题:批量时间窗口中分组事件的字符串值聚合
解决Siddhi批量时间窗口中拼接不同ID的问题
我懂你现在的需求:在30秒的时间批量窗口内,按Target_IP4分组,每个分组输出一个事件,同时把该组里所有不同的id拼接成字符串作为meta_ID。原来的查询没实现这个效果,是因为你直接选择id但没用到合适的聚合函数——Siddhi分组后默认只会返回组内某一个id值,而非所有不同id的拼接结果。
要达成目标,你需要用到Siddhi的字符串聚合函数str:concat_distinct,它专门用来将分组内的不同字符串值拼接成单一字符串,还能自定义分隔符。
修改后的查询语句
from Events#window.timeBatch(30 sec) select str:concat_distinct(id, ", ") as meta_ID, Target_IP4 as target_ip group by Target_IP4 insert into temp;
关键细节说明
str:concat_distinct(id, ", "):第一个参数是要拼接的字段(这里是id),第二个参数是分隔符(示例用逗号加空格,你可以根据需求改成"|"或其他符号)。这个函数会自动去重,只保留不同的id值再进行拼接。- 确保你的Siddhi应用已经导入字符串函数扩展,通常需要在应用开头添加:
@app:name("YourEventAggregationApp") import function str:concat_distinct;
举个实际例子:如果30秒窗口内,Target_IP4为192.168.0.1的事件有id=1、id=2、id=1,那么输出的meta_ID会是"1, 2",自动剔除了重复的id,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Peter Rubi
相关产品推荐
相关产品推荐

