如何在Siddhi模式/序列中表达连续增加值而不是全部写出来?

时间:2018-06-11 09:41:35

标签: java siddhi

最近我试图在Siddhi中编写一个查询来识别流中的多个连续增加/减少/交替值(如连续6或12次增加)。

当然,最直接的方法是将它们逐一写下来,例如

from every e1=DataStream, e2=DataStream[e1.value > value], e3=DataStream[e2.value> value], e4=DataStream[e3.value> value], e5=DataStream[e4.value> value], e6=DataStream[e5.value> value], e7=DataStream[e6.value> value] 
    select e7.index, 3 as errorCode
    insert into ErrorDataStream;

如果我想匹配10个连续增加或减少的值(或甚至是交替值),这将是不方便的。我试着用

from every e1=DataStream -> e2=DataStream[e1.value< value]<6>
select e2[last].index, 3 as errorCode
insert into ErrorDataStream;

但它并不能很好地工作,因为所有e2流都与第一个流中的值相比,而不是前一个流的值。 例如,[10,11,12,13,13,12,11]的值将通过这项工作,但不会不断增加。

我也尝试了如下的序列方法

from e1=DataStream, e2=DataStream[e1.value < value]+, e3=DataStream[e2[last].value > value and e3.index - e1.index > 6]
select e2[last].index, 3 as errorCode
insert into ErrorDataStream;

问题在于,为了匹配这种逻辑,必须减少。如果值为[10,11,12,13,14,15,16 ......],则永远不会通过查询。

有没有其他方法可以表达这种需求?我感谢任何帮助或想法。 谢谢!

0 个答案:

没有答案