2017-10-11 17 views
0

저는 최근에 Esper와 함께 작업 해 왔으며 설명서에 누락 된 기능이 있지만 존재할 수 있습니다.Esper : 시간 누적 창에 이벤트 추가하기 속성에 하나의 조건이 제공되었습니다.

아무도 15 초 동안 팝업을 일으키지 않을 때까지 이벤트를 저장하고 싶습니다.

select rstream * from MyEvent.win:time_accum(15 sec) 

내가

select rstream * from MyEvent where status = 'ALARM_END'.win:time_accum(15 sec) 

처럼 myEvent가에 조건을 추가 할 수 있습니다 그리고이 완벽하게 작동합니다 :

하나 개의 쿼리가 정확히를하지, 그건. 이제

나는 그 말하는 이벤트 유형 속성에 조건을 추가하고 싶습니다 : 다음이 추가되지 않는 새로운 이벤트가 이벤트 유형의 XXXX와 트리거하지만 창에서 이벤트 유형의 XXXX와 이벤트가 이미있는 경우

창에 새로운 터지는 이벤트 (따라서 0에서 15 초까지 스톱워치를 멈추지 않음).

할 방법이 있습니까?

고맙습니다.

편집 :

나의 필요와 에스퍼 문서에 더 깊이 보면, 나는 나의 필요가 난 그냥 중 누적 원하는대로 내가 rstream 필요하다고 생각하지 않습니다

select * from MyEvent.win:time_length_batch(15 sec, 2) 

더 만족 생각 1 또는 2 개의 요소를 가져 와서 한 번에 배열로 가져와야합니다.

그러나 창에 들어오는 첫 번째 (그리고 첫 번째) MyEvent에 조건을 추가 할 수 있습니까? 상태 = 'ALARM_END'입니다.

답변

0

이름이있는 창이있어서 삽입하기 전에 확인할 수 있습니다.

// define named window 
create window MyEventWindow#time_accum(15) as MyEvent; 

// insert events that don't have 'xxx' 
insert into MyEventWindow select * from MyEvent(eventType != 'xxx'); 

// insert events that have 'xxx' only if not already there 
insert into MyEventWindow select * from MyEvent(eventType = 'xxx') 
    where not exists(select * from MyEventWindow where eventType='xxx'); 

// usual select 
select rstream * from MyEventWindow; 
+0

안녕하십니까. 내 질문에 분명하지 않을 수도 있습니다. 'xxxx'는 고정 변수가 아닙니다. – Tchak

+0

현재 창에 eventTypes 'eT1', 'eT2'및 'eT3'이있는 3 개의 이벤트가 있다고 가정 해 봅시다. 그런 다음 새 이벤트가 트리거되면 eventType이 'eT1', 'eT2'및 'eT3'과 다른 경우에만 창에 추가됩니다. 감사합니다. – Tchak

+0

참고 : 이벤트 목록에 'xxxx'이벤트가있을 때마다 세 번째 줄을 쓰는 비 최적 솔루션을 사용할 수 있습니다. – Tchak