Генерация дедуплицированного потока событий без окна

Я пытаюсь создать поток дедуплицированных событий без указания какой-либо политики окон, кроме той, которая используется для дедупликации. Использование предложения output first every в моих запросах дает желаемый эффект, но не тогда, когда эти запросы вставляются непосредственно в поток.

Для примера, приведенного ниже, предположим, что я пытаюсь определить только первый сигнал каждой машины в 4-часовом окне.

(define-event-type! "CarEvent"
   {:license_plate java.lang.String})

(define-event-type! "HonkEvent"
   {:volume java.lang.Integer}
   :supertypes #{"CarEvent"})

(define-variant! "HonkEventDeduplicated" "HonkEvent")

(define-statement! "context-IndividualCarContext"
  "create context IndividualCarContext partition by license_plate from CarEvent")

(define-statement! "populate-HonkEventDeduplicated"
  "context IndividualCarContext
   insert into HonkEventDeduplicated
   select * from HonkEvent
     group by license_plate
     output first every 4 hours")

Однако -- select * from HonkEventDeduplicated срабатывает при каждом сигнале, даже если один и тот же автомобиль подает сигнал два раза подряд.


person Charles Duffy    schedule 07.09.2012    source источник


Ответы (1)


Вместо использования фильтрации предложения output first every это можно сделать с помощью представления std:firstunique:

(define-statement!
  "populate-HonkEventDeduplicated"
  "insert into HonkEventDeduplicated
  select * from HonkEvent.win:time(4 hours).std:firstunique(license_plate)")
person Charles Duffy    schedule 07.09.2012