Может ли UniqueFirst Operator использоваться для выражения логики дедупликации событий в сиддхи
На прошлой неделе я задал вопрос " Как выразить логику дедупликации событий в обработке потока Сиддхи", и было предложено решение для этого;
define stream InputStream (event_id string, data string);
define stream OutputStream (event_id string, data string);
define table ProcessedEvents (event_id string);
from InputStream[not(ProcessedEvents.event_id == event_id in ProcessedEvents)]
insert into OutputStream ;
from OutputStream
select event_id
insert into ProcessedEvents ;
from OutputStream#window.time(2 sec)
select event_id
insert expired events into PurgeStream ;
from PurgeStream
delete ProcessedEvents
on ProcessedEvents.event_id == event_id ;
Решение, описанное выше, требует одной дополнительной таблицы и одного дополнительного потока.
Я только что обнаружил, что есть "уникальный первый" оператор. Интересно, могу ли я использовать этот оператор для выражения требуемой дедупликации в предыдущей ссылке, которая снова описана ниже:
(1) когда событие является первым (поскольку запускается механизм обработки событий) в InputStream, вставьте событие в OutputStream.
(2) если событие с такой же подписью, например, с тем же именем события, поступает в течение 2-минутных окон, мы считаем, что событие идентично, и мы НЕ должны вставлять событие в OutputStream. В противном случае мы должны вставить событие в OutputStream.
Проблема, с которой я сталкиваюсь с трудностью использования этого "уникального первого", заключается в том, что (#window.unique:time): кажется, что только истекшие события (то есть дублированные события) смогут быть выделены и вставлены в вывод, но не первое уникальное событие, которое осталось в окне.
Может ли кто-нибудь дать представление о том, можно ли использовать уникальный первый оператор для выражения моей логики дедупликации и в то же время для упрощения необходимого выражения запроса?