esper检测Event值的变化

时间:2018-03-08 15:28:56

标签: sql complex-event-processing esper nesper

HeJ小鼠! 我的esper代码有一个小问题。输入就是这样:

t=t.plus(1 seconds)
CondiA ={varible ='Temp', value =1}
t=t.plus(1 seconds)
CondiA ={varible ='Press', value =1}
t=t.plus(1 seconds)
CondiA ={varible ='Speed', value =1}
t=t.plus(1 seconds)
CondiA ={varible ='Temp', value =2}
t=t.plus(1 seconds)
CondiA ={varible ='Press', value =2}

t=t.plus(1 seconds)
CondiA ={varible ='Speed', value =2}
t=t.plus(1 seconds)
CondiA ={varible ='Press', value =1}
t=t.plus(1 seconds)
CondiA ={varible ='Press', value =1}
t=t.plus(1 seconds)
CondiA ={varible ='Temp', value =3}
t=t.plus(1 seconds)
CondiA ={varible ='Press', value =1}

我有一种类型的事件,它有一个变量名和一个值。 我想检测一个特定变量的值的变化。 所以我需要一个select语句,它给出了数据:

  • 第二个4(温度从1-> 2变化)
  • 第二个5(按1 - > 2更改)
  • 秒6(速度从1> 2变化)
  • 第二次7(按下从>> 1更改)
  • 第二个9(温度从2-> 3变化)

我尝试了使用priorprev的不同内容,但没有任何正常工作。 这是我做的最合理的一个,但它并没有给我带来的结果。我用一个模式尝试了它,但是我用@SuppressOverlappingMatches得到了内存重载。

select value as x from CondiA#unique(varible) as A where  prior(1, A.value) != A.value AND varible = (select varible from CondiA()#lastevent);

1 个答案:

答案 0 :(得分:0)

如果我理解正确的要求,每个“变量”分区是独立的,并且在每个值“varible”中你需要“事先”吗?

您可以使用类似的上下文

来执行此操作
'${db}'

注意,

  • 不需要数据窗口,“先前”操作没有一个
  • “prev”可以用来代替“在先”并使用分组窗口,请参阅docs,在这种情况下你不需要分区