我想根据一个字段将传入事件合并为一个事件。
输入事件:
{
ID: '123',
eventType: 'a',
eventCode: 1
},
{
ID: '123',
eventType: 'b',
eventCode: 2
},
{
ID: '123',
eventType: 'c',
eventCode: 3
}
预期输出:
{
ID: '123',
events: [{
eventType: 'a',
eventCode: 1
},
{
eventType: 'b',
eventCode: 2
},
{
eventType: 'c',
eventCode: 3
}]
}
我正在根据4个窗口对事件进行分组。因此,我需要处理这4个事件,将它们合并,然后传递给下一步。
用例: 我想使用生成的输出存储在MongoDB中或将其传递到外部服务。
可以用Siddhi吗?
注意:我看到有人问过similar question,但答复是5年前的事,而Siddhi从那以后走了很长一段路。
答案 0 :(得分:2)
您可以使用Siddhi以下应用程序来满足您的要求。我已经利用string extension来做到这一点。但是请注意,生成的输出正是您所要求的。如果您想要适当的JSON输出,则可能还必须使用execution json extention。请遵循自述文件以获取有关扩展名用法的详细信息。
@App:name("testJsonConcat")
@App:description("Description of the plan")
-- Please refer to https://docs.wso2.com/display/SP400/Quick+Start+Guide on getting started with SP editor.
define stream inputStream(id string, eventType string, eventCode int);
partition with (id of inputStream)
begin
from inputStream
select id, str:concat("{eventType: '", eventType, "' , eventCode :",eventCode,"}") as jsonString
insert into #formattedStream;
from #formattedStream#window.lengthBatch(4)
select str:concat("{ ID : '", id, "',events: [", str:groupConcat(jsonString),"]}") as result
insert into concatStream;
end;
from concatStream#log()
select *
insert into temp;