2016-08-11 16 views
0

주문이 가능한지 여부를 표시하는 EPL 문을 작성하려고합니다.Esper에서 쿼리 및 사용자 정의 함수를 작성하십시오.

두 개의 이벤트, EventA (처리됨) 및 EventB (처리되지 않음)가 있습니다.

스키마 작성 EventA (유형 문자열, percentCompleted 정수);
스키마 작성 EventB (유형 문자열);

문은 요소의 유형 (문자열)을 기반으로 처리 된 모든 요소와 일치해야합니다. 결과에는 부울 값이 포함되어야합니다. 부울 값은 주문 처리 여부를 나타냅니다.

나는 성공적인 성냥이 이루어질 때 (그리고 명령을 내릴 수있을 때) 진실을 되돌리기 위해 아래 진술을 얻었다. 그러나 주문을 제출할 수없는 경우에도 false를 반환하고 싶습니다.

케이스는 여기 테스트 :
http://esper-epl-tryout.appspot.com/epltryout/mainform.html

create schema EventA(type string, percentCompleted integer); 
    create schema EventB(type string); 

    @Name('Out') select * from pattern [every a=EventA -> every b=EventB(a.type = b.type AND a.percentCompleted > 20) ] 

순서 :

EventA={type="1",percentCompleted=0} 
    EventA={type="2",percentCompleted=0} 
    EventA={type="1",percentCompleted=20} 
    EventA={type="1",percentCompleted=40} 
    EventB={type="1"} 

이 결과 : (만 진정한 결과를 반환) :

Out-output={a={EventA={type='1', percentCompleted=40}}, b={EventB={type='1'}}} 

내가 돌아 내 문을 원하는 전체 결과 대신 TRUE 및 "유형"을 또한 쿼리가 거짓을 반환하고 "유형"을 입력하면 a.percentCompleted가 표시됩니다. < 20.

답변

0

FALSE를 나타내는 데 완료되는 시간은 얼마나 오래 완료해야합니까? 또는 매번 거짓말을하는 아이디어입니까? 어느 쪽이든 두 번째 EPL을 작성하고 동일한 청취자를 첨부하는 것이 가장 쉽습니다. 둘 중 하나를 선택하거나 쿼리를 조인으로 작성하십시오.

+0

네, 매번 false를 얻는 것이 좋습니다. 사실 조금 혼란 스럽습니다.이 사건에 대한 질문을 진술 해 주시겠습니까? – Umer

+0

'EPStatement cepStatement1 = cepAdm.createEPL ("모든 * EventA -> 모든 b = EventB (a.type = b.type AND a.percentCompleted> 20)" "패턴에서 선택 *"); cepStatement1.addListener (새 CEPListener1()); ' ------------------------------------------------- --- EPStatement cepStatement2 = cepAdm.createEPL ("select * from pattern [모든 a = EventA -> b = EventB (a.type = b.type AND a.percentCompleted <= 20)]"); cepStatement2.addListener (새 CEPListener2()); ------------------------------------------------- ------------- 괜찮습니까? – Umer

+0

그리고 EventA의 최신 값으로 만 확인하고 이전의 모든 값을 검사하는 방법은 없습니다. – Umer