Может ли 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): кажется, что только истекшие события (то есть дублированные события) смогут быть выделены и вставлены в вывод, но не первое уникальное событие, которое осталось в окне.

Может ли кто-нибудь дать представление о том, можно ли использовать уникальный первый оператор для выражения моей логики дедупликации и в то же время для упрощения необходимого выражения запроса?

0 ответов

Другие вопросы по тегам