2017-08-05 79 views
0

我想从4个输入流中产生一个流。例如,我的查询只能在Siddhi CEP引擎中以正确的流顺序工作

from s1[at1>0], s2[at2==2], s3[at3>1], s4[at4 is null] 
select 'k' as res 
insert into s5; 

的第一个问题是,如果在其他为了我输入事件状态西提尝试它,它不会产生结果。其次,如果我没有输入其中一个事件,则再次不会产生结果。而且,如果我没有在属性at4中输入值,则会产生错误。 我的目标是如果at4没有价值或s4未到来,请将'k'置于水库。

+0

我不知道你所说的意思 - 如果在其他为了我输入事件状态西提尝试它,它不会产生结果 –

+0

我的意思是,事件会在混合顺序,例如s1之前的s2,在这种情况下它不会工作。我想我解决了这个问题,但它更复杂。 – user3265113

回答

1

在上面你正在使用一个序列[1]。序列要求所有传入事件按特定顺序进行。因此,在以上给出的查询中,只有当您按照以下顺序依次执行事件时,才会得到输出。 1.事件,其中AT1> 0 2.事件,其中AT 2 = 2 3.事件其中AT3> 1 4.事件,其中AT4 = NULL

如果事件之一不来或条件不马赫你不会得到输出。这就是为什么你没有得到任何结果,这是预期的行为。如果at4没有价值或者事件s4没有来临,你能确认你的请求是否只是“把'k'放在res中。”如果是这种情况,我可以帮你解决这个问题。

Siddhi尝试它不允许您保留未定义的属性。这就是为什么当你没有投入价值时你会得到和错误的原因。 Siddhi也不允许你不发送已经定义的属性。 Siddhi总是要求您发送所有已定义的属性。唯一的可能性是该属性获得您的支票覆盖空。

[1] https://docs.wso2.com/display/CEP420/SiddhiQL+Guide+3.1#SiddhiQLGuide3.1-Sequence

+0

如果s4没有出现,我想把'k'放在res中 – user3265113