2013-12-16 2 views
1

저는 Esper에게 매우 익숙하며 방금 튜토리얼을 읽었으므로 제가 갖고있는 의문이 많습니다.간단한 Esper 평균 쿼리 만들기

모든 데이터 소스에서받은 정보의 평균을 계산하는 쿼리를 작성하려고합니다. 내 다음 단계는 평균 계산 한 후

select * from pattern [every e=MyClass.Event] 

:

select avg(cast(value, float)) from pattern [every e=MyClass.Event] 

을하지만 내가 얻을

그래서 난 그냥받을 모든 것을 출력하는 간단한 쿼리를 시작합니다 오류 :

[ERROR] [2013-12-16 17:12:16,959] [qtp1609813298-11] net.jnd.thesis.helper.RoutesWrapper - Error starting statement: Property named 'value' is not valid in any stream [select avg(cast(value, float)) from pattern [every e=net.jnd.thesis.camel.bean.CamelInternalEvent(sid=0 and sid<1387214056883)]] 

기본적으로이 형식을 사용하는 동안 속성 값에 액세스 할 수 없습니다. 나는 스트림이 숫자 만 떠 포함되어 있다는 사실을 알고, 그래서 나는 모든 것의 평균 만들기 위해 쿼리의 다른 버전을 시도 :

select avg(*) from pattern [every e=MyClass.Event] 

분명히 avg(*)를 사용하는 것은 잘못된 구문이기 때문에 또한 작동하지 않습니다.

웹 사이트에서 빠른 시작과 자습서를 다시 읽었지만 나에게 도움이 될만한 것을 찾을 수 없었습니다. 모든 데이터 소스에서받은 모든 값의 AVG, Median 또는 STDDEV를 만드는 쿼리를 작성하려면 어떻게합니까?

답변

1

esper 구성 파일에서 사용중인 클래스에 대해 esper에게 알린 후.

<?xml version="1.0" encoding="UTF-8"?> 
<esper-configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://www.espertech.com/schema/esper"> 

<event-type name="MyClass" class="package.MyClass"/> 
</esper-configuration> 

쉽게 평균을 이벤트 스트림을 처리하고 계산할 수 있어야한다 :

값이 MyClass에의 공개 속성 또는 양식 getValue의 게터을 가지고
select avg(value) from MyClass 

. 어떻게 든 평균 데이터를 얻어야합니다. 쉬운 방법은 명령문을 crete 할 때 update (float) 메소드로 오브젝트를 등록하는 것입니다. Esper는 새로운 사건이 접수 될 때마다 새로운 평균치로 이것을 호출 할 것입니다. Esper 솔루션 페이지에 비슷한 분량의 example statement이 있습니다.이 페이지는 분당 데이터의 평균을 계산합니다. 귀하의 질문에 왜 패턴 표현이 필요한지 명확하지 않았으므로이를 생략했습니다.