流-将类似事件数据合并到一个事件中

时间:2018-10-22 06:45:55

标签: wso2 siddhi

我想根据一个字段将传入事件合并为一个事件。

输入事件:

{
  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从那以后走了很长一段路。

1 个答案:

答案 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;