Как сохранить отчетливость до тех пор, пока определенное условие не станет истинным в EPL ESPER

У меня есть два типа событий (A и B). Я хотел бы написать шаблон, который обнаруживает каждое событие B, которое происходит после события A с тем же идентификатором: every A -> B (A.id = B.id). Однако это должны быть разные идентификаторы. Другими словами, шаблон должен игнорировать все события A с одним и тем же идентификатором после первого, пока приведенное выше выражение не станет истинным, что означает, что приходит событие B с тем же идентификатором.

Например, предположим, что это поток событий:

1. A (id: 1); 2. A(id: 2); 3. A (id: 3); 4. A(id: 1); 5. A (id: 2); 6. B (id: 1); 7. B (id: 2); 8. A (id: 1); 9. B(id: 3); 10. A (id: 1); 11. B (id: 1)

Шаблон должен игнорировать событие №4, так как оно имеет тот же идентификатор, что и событие №1. Когда наступит событие №6, шаблон должен соответствовать 1. A (id: 1) -> 6. B (id: 1). Затем шаблон должен разрешить новое событие A с идентификатором = 1. Таким образом, событие №8 не должно быть проигнорировано, а событие №10 должно быть проигнорировано. Когда наступит событие №11, шаблон снова должен совпасть 8. A(id: 1) -> 11. B(id: 1).

Кроме того, событие №2 должно совпадать с событием №7, а событие №3 должно совпадать с событием №9.

Я пытался использовать EVERY-DISTINCT(A.id) A -> B (A.id=B.id), но он игнорирует все события A с одинаковым идентификатором после первого. Затем я попробовал EVERY (A -> B (A.id = B.id)), но это тоже не сработало, поскольку игнорирует все события A независимо от идентификатора, пока не придет событие B с тем же идентификатором.


person korujzade    schedule 15.12.2016    source источник


Ответы (1)


Вы можете иметь оператор every A -> B (A.id = B.id) внутри оператора PATTERN и добавить дополнительно добавить @SuppressOverlappingMatches сразу после ключевого слова PATTERN.

Полное заявление будет примерно таким:

SELECT b.id FROM PATTERN @SuppressOverlappingMatches [every a=A -> b=B (a.id = b.id)] 

Ссылка: http://www.espertech.com/esper/release-5.5.0/esper-reference/html/event_patterns.html#patterns-howto-suppress

person Community    schedule 15.12.2016