Как выбрать нет.событий и сравнить все события? - PullRequest
0 голосов
/ 28 декабря 2018

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

Я делаю что-то вроде этого, чтобы получать события, основанные на некотором указанном временном интервале, используя ключевое слово 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 Ответ

0 голосов
/ 29 декабря 2018

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

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 ;
...