Esper EPL Запрос времени (t) и времени (t-1) - PullRequest
2 голосов
/ 26 октября 2010

Я пытаюсь реализовать запрос EPL, который может подобрать среднее значение для времени (t) и времени (t-1).

Например:

a) в первые 5 секунд (секунды 0-5) происходит 2 события со средним значением 12

b.) в течение следующих 5 секунд (секунд 5-10) происходит 3 события со средним значением 23, и в запросе EPL, который улавливает эту информацию, я также могу видеть среднее значение 12 из предыдущего временного окна первого5 секунд

Идея, которую я имею, состоит в том, чтобы разбивать объекты / запросы таким образом, чтобы в конечном запросе epl был снимок времени (t) и времени (t-1)как видно из фактически созданного объекта ScoreInfoBeforeAfter.Однако это не работает.

Любые идеи будут с благодарностью.Спасибо.

~~~~

// The object being published to the Esper stream:
class ScoreEvent { int score; ... }

1 Ответ

7 голосов
/ 28 октября 2010

Похоже, ключевое слово до является решением.

http://esper.codehaus.org/esper-2.1.0/doc/reference/en/html/functionreference.html

См .: Раздел 7.1.9

С точки зрения примера, который я описал в оригинальном сообщении, вот соответствующее решение, которое я нашел.Кажется, он работает правильно.

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);

..
А потом это хорошо, потому что вы можете делать такие вещи:

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;
...