ESPER EPL Consulta para o tempo (t) e o tempo (T-1)
Pergunta
Estou tentando implementar uma consulta EPL que possa pegar o AVG para o tempo (t) e o tempo (T-1).
Por exemplo:
a) Nos primeiros 5 segundos (segundos 0-5), existem 2 eventos com um AVG de 12
b) Nos próximos 5 segundos (segundos 5-10), existem 3 eventos com um AVG de 23 e, na consulta EPL que captura essas informações, também posso ver o AVG de 12 da janela de tempo anterior do Primeiros 5 segundos
A idéia que tenho é escalonar os objetos/consultas de tal maneira que a consulta EPL final tem um instantâneo de tempo (t) e tempo (T-1), como visto no objeto de objeto praticamente criado. No entanto, não está funcionando.
Quaisquer idéias seriam muito apreciadas. Obrigado.
~~~~
// The object being published to the Esper stream:
class ScoreEvent { int score; ... }
Solução
Parece a palavra -chave anterior é a solução.
http://esper.codehaus.org/esper-2.1.0/doc/reference/en/html/functionReference.html
Ver: Seção 7.1.9
Em termos do exemplo que descrevi na postagem original, aqui está a solução correspondente que encontrei. Parece estar funcionando corretamente.
INSERT INTO ScoreInfo
SELECT
'ScoreInfo' as a_Label,
average AS curAvg,
prior(1, average) AS prevAvg
FROM
ScoreEvent.win:time_batch(5 sec).stat:uni(score);
SELECT
*
FROM
ScoreInfo.win:length(1);
..
E então é bom, porque você pode fazer coisas assim:
SELECT
'GT curAvg > prevAvg' as a_Label,
curAvg,
prevAvg
FROM
ScoreInfo.win:length(1)
WHERE
curAvg > prevAvg;
SELECT
'LTE curAvg <= prevAvg' as a_Label,
curAvg,
prevAvg
FROM
ScoreInfo.win:length(1)
WHERE
curAvg <= prevAvg;