Как выбрать нет. событий и сравнить все события?

Делая корреляцию между входящими событиями, мы можем сделать некоторые вычисления с прошлыми данными, основанными на указанном периоде времени Как уже упоминалось здесь.

Я делаю что-то вроде этого, чтобы получать события на основе определенного периода времени с помощью within ключевое слово.

@info(name='dg-start-check-query') from every (e1=InputStream) -> e2=InputStream[e1.meter_id=='s1' and e2.meter_id=='s1' and convert(e2.current_avg, 'double')-convert(e1.current_avg, 'double')==convert(e2.current_avg, 'double') and convert(e1.current_avg, 'double')+convert(e2.current_avg, 'double')!=0 and convert(e1.current_avg, 'double')==0] within 1 min select time:dateFormat(e2.device_time, 'HH:mm:ss.SSS yyyy-MM-dd') as date_time insert into OutputStreamStarted;

Как я могу позволить этому коду просто получать последние 2 или 3 события и выполнять вычисления над ним так же, как события собираются с использованием window? Этот код будет получать все события в течение заданного периода времени и выполняться несколько раз, если несколько событий удовлетворяет его критериям.

1 ответ

Решение

Вы можете использовать окно определенной длины, чтобы выполнить это требование. Для каждого входящего события выполните однонаправленное соединение с окном, а затем поместите в окно. Ваши условия могут войти при условии присоединения. Пример запроса приведен ниже. Вам нужно будет работать над своими логическими условиями, поскольку они нуждаются в улучшении.

define stream InputStream (meter_id string, current_avg string, device_time int); 
define window eventWindow (meter_id string, current_avg string, device_time int) length(2); 

@info(name = 'query1') from InputStream[meter_id=='s1']#window.length(1) as e1 unidirectional join eventWindow as e2 
on (convert(e2.current_avg, 'double')-convert(e1.current_avg, 'double')==convert(e2.current_avg, 'double')) 
select e1.device_time insert into OutputStreamStarted ; 

@info(name = 'query2') from InputStream[meter_id=='s1'] 
select meter_id, current_avg, device_time 
insert into eventWindow ;
Другие вопросы по тегам