2013-11-27 2 views
1

현재 주문 개체가 있습니다. 우리는 orderId, state 및 price라는 세 개의 필드가 있다고 가정합니다.스트림에서 요소를 제거하는 방법

class Order 
{ 
    public int orderId; 
    public String state; 
    public int filled; 
} 

주문이 끝나면 상태 및 충전량이 변경됩니다.

Order o .....; 
epService.EPRuntime.SendEvent(o); 

이제 순서가 SendEvent 그 이전 주문 객체가 아닌 다른 객체 (즉,하지 참조)를 통해 추가 될 때마다 : 때마다 우리는 에스퍼 런타임을 통해 그것을 밀어 필드 변화가있다. 즉, 오래된 주문 객체가 더 이상 볼 문장이 없다는 것을 의미합니다.

스트림의 가장 최근 버전의 주문에 대해서만 아래의 구문을 사용하고 싶습니다. 즉 개념적으로 하나만 있어야합니다. 스트림의 각 물리적 순서에 대한 순서 오브젝트.

"select filled from OrderStream.win:keepall() where orderId= 1234" 

오래된 주문 개체를 제거 할 수있는 방법이 있습니까? 참조를 사용하여 이전 주문 개체를 업데이트 한 다음 다시 밀어 넣을 수 있습니까? 다른 방법이 있습니까 ??

"create window OrderWin.std:unique(orderId) as Order" 
"insert into "OrderWin select * from Order" 
"select * from OrderWin where ..." 

답변

1

을 사용하고

창문. 모든 이벤트를 유지하는 것은 아마도 당신이 원하는 것이 아닙니다. 예를 들어 다른 창을 사용해보십시오 ...

기호 당 마지막 거래 만 원했다고 가정 해 봅시다. 당신은 다음 작업을 수행 할 수 있습니다 :

선택 *을 tradeEvent.std에서 : 독특한 (기호)이 주어진 기호와 일치하는 각 이벤트에 대한 마지막 이벤트를 유지

.

0

또 다른 대답은을 변경하는 것입니다 : 나는 현재 당신은 독특한 이벤트를 보유하고 명명 된 창 (이전의 중복이 퇴거하는)

뭔가처럼 만들 수 Nesper