2017-09-03 5 views
0

私はtime_length_batchから最後のイベントを取得しようとしていますが、これを行う方法は紛失WRTです。時間と長さを持つEsperウィンドウからの最後のイベント

たとえば、在庫イベントがあり、利用可能な各製品から最新のアップデートを取得したいと考えています。次のクエリはほとんど必要とされているものを提供しています。私は、最後の分または2つのイベント内のすべてのイベントを取得し、ウィンドウ内のことを除いて

SELECT product, inventory FROM 
InventoryEvents.std:groupwin(name).win:time_length_batch(1 min, 2); 

を。私はそのウィンドウの最後のイベントに興味があります。 (2を使用して結果を簡単にテストする)

結果、UpdateListenerでは、配列から最後のイベントを出力する必要があります。しかし、私はこれらのイベントの必要がなく、最終的には最後のイベントを得るために探している加入者に切り替えることを願っています。また、加入者は、はるかにパフォーマンスの高いので、これに代えて、次のとおりです。

public static class EveryListener implements UpdateListener { 

    public void update(EventBean[] newData, EventBean[] oldData) { 

     out.println("* Window received: " + " " + 
      newData.length + " " + newData[newData.length - 1].getUnderlying()); 
    } 

    } 

だけ

public void update(String product, int inventory) { 
     out.println("** Explicit event received: " + " " + product + " " + inventory); 
    } 

が、結果は...

* Window received: 2 {product=A, inventory=-10} 
** Explicit event received: A 20 
** Explicit event received: A -10 

私は

SELECT product, inventory FROM 
InventoryEvents.std:groupwin(name).win:time_length_batch(1 min, 1000) 
    .std:win:lastevent(); 
を試してみました

しかし、それはexpecを与えません結果を示す。

グループ化されたウィンドウの最後のイベントを取得するにはどうすればよいですか?

答えて

0

「最後の」集約関数があります。集約関数であるため、group-by句はグループ化を指定する必要があります。

だから、クエリがある....あなたが探している結果を与える可能性と「によってグループ」を必要としないので、「PREV」機能も

SELECT last(inventory) FROM 
InventoryEvents.std:groupwin(name).win:time_length_batch(1 min, 2) 
group by name 

があります。

関連する問題