2017-09-03 124 views
0

我試圖從time_length_batch中獲取最後一個事件,但我無法在WRT中如何執行此操作。來自具有時間和長度的Esper窗口的最後一個事件

例如...有一個庫存事件,並希望從每個可用產品獲取最新更新。下面的查詢主要提供所需要的:

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

除了窗口,我得到的最後一個分或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(); 

但這並不能預測結果。

如何獲取分組窗口的最後一個事件?

回答

0

有「最後」聚合功能。由於它是一個聚合函數,group-by子句必須指定分組。

所以查詢....

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

還有如此「分組」功能,可以給你你正在尋找的和不需要「按組」的結果。

相關問題