Напротив lastUnique()

Новичок в Esper и EPL в целом, у меня есть два варианта использования, которые в основном противоположны друг другу. Сначала мне нужно поймать все уникальные события во временном окне, используя firstunique(*parameters*).win:time(*time*).

Теперь то, что мне нужно сделать, это полная противоположность, в основном перехватывать все события, которые поступают в это окно и НЕ вызываются этим оператором, в основном все дубликаты.

Как я могу этого добиться? Спасибо !


person Christophe Schutz    schedule 06.07.2017    source источник


Ответы (2)


Вы можете использовать подзапрос и «не существует». Например:

select * from Event e1 where not exists (select * from Event#firstunique(*parameters*)#time(*time*) e2 where e1.parameters = e2.parameters)
person user3613754    schedule 06.07.2017
comment
Это не работает. Во-первых, мне нужны дубликаты, поэтому следует использовать exists, а не не существует. Но даже тогда проблема заключается в том, что он перехватывает ВСЕ события, потому что в то время, когда он выполняет первый запрос, событие уже было добавлено в окно подзапроса, и поэтому оно действует как дубликат, когда на самом деле это не так. - person Christophe Schutz; 11.07.2017

Я действительно нашел решение, оно включает в себя использование уникальных идентификаторов для входящих событий в дополнение к сравнению их параметров.

Запрос выглядит примерно так:

select * from Event a where exists (select * from Event.std:firstUnique(*parameters*).win:time(*time*) b where a.eventId <> b.eventId)

Это решает мою проблему, когда метод exists возвращал каждое событие (дубликаты и уникальные события), потому что окно в подзапросе заполнялось первым.

person Christophe Schutz    schedule 11.07.2017