Как выбрать нет. событий и сравнить все события?
Делая корреляцию между входящими событиями, мы можем сделать некоторые вычисления с прошлыми данными, основанными на указанном периоде времени Как уже упоминалось здесь.
Я делаю что-то вроде этого, чтобы получать события на основе определенного периода времени с помощью 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 ;