Wso2 如何转换包含事件序列的流

Wso2 如何转换包含事件序列的流,wso2,wso2cep,siddhi,Wso2,Wso2cep,Siddhi,我编写了一个自定义http接收器,它从另一个系统获取事件,json示例如下: {"tag":"A01","time":"10:01:00","value":"30.01"}, {"tag":"A01","time":"10:01:01","value":"35.01"}, {"tag":"A01","time":"10:01:02","value":"31.01"}, {"tag":"B01","time":"10:01:00","value":"105.017"}, {"tag":"B01",

我编写了一个自定义http接收器,它从另一个系统获取事件,json示例如下:

{"tag":"A01","time":"10:01:00","value":"30.01"},
{"tag":"A01","time":"10:01:01","value":"35.01"},
{"tag":"A01","time":"10:01:02","value":"31.01"},
{"tag":"B01","time":"10:01:00","value":"105.017"},
{"tag":"B01","time":"10:01:01","value":"230.01"},
{"tag":"B01","time":"10:01:02","value":"117.01"}
然后,接收方将json逐个发送到流名称“tag_input_stream”,其中包含以下字段:

tag string, time string, value double
现在我有了另一个流名称格式\u tag\u stream,其中包含字段:

time string, tag_A_val double, tag_B_val double
我想从标记输入流将值插入格式标记流,如下所示:

10:01:00, 30.01 , 105.017
10:01:01, 35.01 , 230.01
10:01:02, 31.01 , 117.01
我使用Execution Plan编写siddhi脚本:

from every(e1=tag_input_stream)->e2=tag_input_stream[time==e1.time]
select e1.time as time, e1.value as v1, e2.value as v2
insert into format_tag_stream
但它不起作用。如何编写脚本,有什么例子吗?感谢查询中的:

from every(e1=tag_input_stream[tag=='A01'])-> e2=tag_input_stream[time==e1.time AND tag=='B01'] 
您假设事件A01首先出现,B01随后出现。然而,若它们以相反的顺序出现,则不会执行上述查询

因此,请按照下面给出的方式编写另一个查询,以便处理逆序事件

from every(e1=tag_input_stream[tag=='B01'])-> e2=tag_input_stream[time==e1.time AND tag=='A01']
谢谢


Upul

您的查询是正确的,应该可以正常工作。执行计划中可能未收到事件。您可以通过启用对执行计划HTTP接收器的跟踪来检查这一点。是的,它应该可以工作。但是格式为\u tag\u stream的某些行是错误的,例如,值30.01应该出现在tag\u A\u值字段中,但它实际上出现在tag\u B\u值字段中。所以我把'from'改为'from'(e1=tag\u input\u stream[tag=='A01'])->e2=tag\u input\u stream[time==e1.time和tag=='B01'])。但是它只插入了一行。你的意思是因为顺序,我应该写两个查询吗?但是接收器将收到如此多的差异标记值,我们无法保证它们出现的顺序。只要标记值是A01或B01,事件的数量就无关紧要。但是是否有超过2个标记值?在这种情况下,现有的逻辑将无法工作。是的,超过2个标记,例如,“C01”“D01”…,那么siddhi脚本如何做到这一点呢?