Как индексировать события в шаблонах с помощью Esper EPL (CEP) - PullRequest
0 голосов
/ 13 января 2019

Я не могу сослаться на конкретное событие с индексом или чем-то еще. аналогично сгенерированному кортежу данных определенным окном (как я понимаю логику Esper CEP Engine). Без возможности ссылки я не могу реализовать логику нового шаблона CEP в Esper EPL.

Уже пробовал:
1) предыдущая функция, но не разрешенная в шаблоне [например, из Esper Doc .: выберите пред. (2, цена) из Trade.win: длина(10)]
2) индексирование кортежа, как в Python или Java [например, dataTuple [1] для второй записи]
3) создание нескольких частей (a, b, c ...) и ссылки на них [например, a = EventA -> b = EventA

Входящие события:
EventStream = {id = 1, Temp1Event = 35,5, Temp2Event = 37,2, PressureEvent = 896,99}
t = t.plus (2 секунды)
EventStream = {id = 2, Temp1Event = 37,4, Temp2Event = 39,1, PressureEvent = 869,5}
t = t.plus (2 секунды)
EventStream = {id = 3, Temp1Event = 48,3, Temp2Event = 51,9, PressureEvent = 908,56}
t = t.plus (2 секунды)
EventStream = {id = 4, Temp1Event = 55,7, Temp2Event = 56,9, PressureEvent = 928,82}
t = t.plus (2 секунды)
EventStream = {id = 5, Temp1Event = 66,5, Temp2Event = 39,48, PressureEvent = 0}
t = t.plus (2 секунды)
EventStream = {id = 6, Temp1Event = 52.3745930271536, Temp2Event = 31.1136121636059, PressureEvent = 0}
t = t.plus (2 секунды)
EventStream = {id = 7, Temp1Event = 41.9102341671244, Temp2Event = 24.9156396131152, PressureEvent = 0}

Логика правила:
Подайте предупреждение об открытой двери камеры давления (= правило срабатывает), если давление становится равным «0», и из-за этого температура быстро падает.

Мое утверждение:
SELECT * FROM pattern [every (a = EventStream (PressureEvent = 0) -> b = EventStream (Temp1Event [0]> 0,7 * Temp1Event [2]))]. Win: длина (3);

Я ожидаю, что правило сработает, если а) событие давления становится равным 0 и б) после этого температура быстро падает, что подтверждается значением из первого входящего события и значением второго входящего события.

Я знаю, что есть функции "lastEvent" и "firstEvent". Может быть, они являются возможным решением. Несмотря на это, я надеюсь получить возможность, аналогичную индексу «DataTuple [x]», так как я думаю, что он более гибкий.

Большое спасибо заранее! :)

1 Ответ

0 голосов
/ 15 января 2019

Вы могли бы сделать это.

SELECT * FROM pattern [every a=EventStream(PressureEvent=0) 
  -> b=EventStream
  -> c=EventStream(b.temp > 0.7*temp)]

В шаблоне «tag =» присваивает имя событию, например «b». Затем тег можно использовать в выражениях, т. Е. "B.temp".

Есть и другие решения. Функция «prev» или перечисление (т.е. take).

...