Эспер: найти самое раннее событие во времени после наступления триггерного события.

Мой поток событий обычно содержит событие открытия, за которым следует событие закрытия. Назовем их O и C соответственно. Однако есть две особенности:

  1. За O может следовать один или несколько O до прибытия C
  2. C может полностью отсутствовать (см. ниже)

Предполагается, что C должен прибыть не позднее, чем в течение времени T после некоторого O. В противном случае C считается отсутствующим. Когда C в конце концов прибудет, все открытые O, прибывшие до T из этого C, будут считаться потерянными и не представляют интереса.

Я хочу, чтобы esper запускал каждую пару O, за которой следует C, где выбирается самый ранний O не дальше, чем T из C. Любые Os между, а также перед выбранным O пропускаются.

Например,

O1 O2 O3 ... C

следует выбрать (O1,C), если datediff(O1, C) < T

следует выбрать (O2,C), если указанное выше неверно, и datediff(O2, C) < T

и т.п.

Я потерял самообладание в подходе к этой проблеме. Похоже, мой разум не совместим с эспером. Ваша помощь очень нужна.


person Vitamin C    schedule 25.06.2013    source источник


Ответы (1)


Это может быть примерно так, как показано ниже. Идея состоит в том, что когда приходит событие, мы хотим просмотреть последнюю минуту событий и найти первое, которое соответствует разнице во времени. Попросите второй оператор отфильтровать те, у которых нет совпадений, если это необходимо.

вставьте в пару выберите , (выберите окно().firstOf(v => v.time - e2.time ‹ T) из Event.win:time(1 min) as e1) в соответствии с событием как е2

выберите * из пары, где совпадение не равно нулю

person user650839    schedule 25.06.2013
comment
Прежде всего, спасибо за ответ. Имея в виду вашу идею, я попробовал следующий запрос: select (select first(*) from O.win:time(1 hour)), c.* from C c; Он выводит самое раннее O в течение часа с C. К сожалению, он продолжает сообщать о самом раннем O, когда последующие пары O, за которыми следует C, прибывают в течение одного часа. То есть для следующей серии, где все события произошли в течение 1 часа: O1 O2 C1 O3 C2, он возвращает пары (O1,C1) и (O1, C2). Хотя я хочу (O1,C1), (O3,C2). Должны быть какие-то средства для сброса временного окна прибытия Os, когда прибывает C... - person Vitamin C; 26.06.2013