0

嘿!我的 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}

我有一种类型的事件,它有一个变量名和一个值。我想检测一个特定变量的值的变化。所以我需要一个选择语句,它为我提供数据:

  • 秒 4(温度从 1->2 变化)
  • 秒 5(按从 1->2 更改)
  • 秒 6(速度从 1->2 更改)
  • 第二个 7(按从 2->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);
4

1 回答 1

0

如果我正确理解了要求,每个“变量”分区都是独立的,并且在每个值“变量”内你需要“之前”?

您可以使用这样的上下文来执行此操作

create context PerVarible partition by varible from CondiA;
context PerVarible select value as x from CondiA where prior(1, A.value) != A.value;

笔记,

  • 不需要数据窗口,“先验”无需数据窗口即可运行
  • 可以使用“prev”代替“prior”并使用分组窗口,请参阅文档,在这种情况下您不需要分区
于 2018-03-08T18:20:14.293 回答