Stream 如何用cep描述这个复杂的场景? 这是我的事件模式
Stream 如何用cep描述这个复杂的场景? 这是我的事件模式,stream,complex-event-processing,esper,siddhi,drools-fusion,Stream,Complex Event Processing,Esper,Siddhi,Drools Fusion,事件A(字段A字符串、字段B字符串、文件DC字符串) EventB(字段字符串,字段字符串) 我希望查询如下所示: 将事件分为组窗口,按字段A分组事件A,字段B,按字段E分组事件B 如果事件按以下顺序发生:EventA->EventA->EventA->EventA->EventB->EventB,且distinct(EventA.FieldC)>=3,且每个EventB.FieldE等于每个EventA.FieldB(联接部分),则生成一个相关事件 问题在于:EventA(3)的计数是针对
事件A(字段A字符串、字段B字符串、文件DC字符串)
EventB(字段字符串,字段字符串)
字段A分组事件A,字段B
,按字段E分组事件B
EventA->EventA->EventA->EventA->EventB->EventB
,且distinct(EventA.FieldC)>=3
,且每个EventB.FieldE
等于每个EventA.FieldB
(联接部分),则生成一个相关事件[“1”、“2”、“3”]、[“1”、“2”、“4”]、[“1”、“2”、“5”]
可以触发“EventA->EventA->EventA”
(一个组窗口中有3个事件),[“1”、“2”、“3”]、[“1”、“3”、“4”]、[“1”、“4”、“5”]
不能(3个组窗口,每个窗口有1个事件)和2个事件B
因此,完整的示例是:
[“1”、“2”、“3”]、[“1”、“2”、“4”]、[“1”、“2”、“5”]、[“a”、“2”]、[“b”、“2”]
我发现即使用naturl语言也很难描述这种情况,我不知道如何在CEP中描述这种情况
我在esper中使用上下文来解决计数是针对组窗口而不是流(在siddhi中,分区)的问题。它适用于单个EventA或EventB,但如果EventA和EventB必须执行模式,则两个独立的上下文不能一起使用。我尝试了上下文嵌套
类似:
创建上下文PartAB
上下文PartA由EventA中的FieldA和FieldB进行分区,
EventB中按FieldE划分的上下文PartB分区
这似乎不起作用
感谢所有能帮助解决这个问题的人。首先想到的问题是“FieldA,FieldB”和“FieldE”有什么关系?例如,它是字符串附加,其中“FieldA | | FieldB==FieldE”或比较这些字段的操作是什么 在Esper中,使用如下上下文:
create context PartAB
partition by to_be_determined_A_B from EventA,
to_be_determined_E from EventB
此非嵌套分区上下文确保事件位于同一分区中(嵌套上下文将创建所有可能的组合,而这不是您想要的)
您可以通过在事件中插入或向事件中添加新字段来计算“待确定”。以下是插入到以下内容的示例:
insert into EventAWithFieldCombined select FieldA||FieldB combinedAB, * from EventA
。。。上下文可能是这样的
create context PartAB
partition by combinedAB from EventAWithFieldCombined,
FieldE from EventB
非常感谢您的回答。但是EventA和EventB之间的唯一关系是模式
(A->A->A->B->B)中的每个B.FieldE等于每个A.FieldB
(连接部分)。
我认为这更像是一个按FieldA、FieldB和EventB groupwin按FieldE计数(操作)每个B.FieldE等于每个a.FieldB是模式的相关条件。(但groupwin不能用于模式)关键问题是,我在组窗口中设置了EventA、EventB事件,但我不能使用模式在它们之间进行关联。