来自Esper窗口的最后一个事件,具有时间和长度

时间:2017-09-03 12:34:45

标签: complex-event-processing esper

我正试图从time_length_batch获取最后一个事件,但我不知道WRT如何做到这一点。

例如......有一个库存事件,并希望从每个可用的产品获取最新更新。以下查询主要提供了所需内容:

resources :pedidos do
  get :detalhes, on: :member, as: 'detalhes'
end

除了在窗口内我得到最后一分钟或2个事件中的每个事件。我对该窗口的最后一个事件感兴趣。 (使用2来轻松测试结果。)

因此,在UpdateListener中,我需要从数组输出最后一个事件。但由于我不需要这些事件,并且最终想切换到订阅者,我希望得到最后一个事件。此外,订阅者的表现要高得多,而不是:

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

只是

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

但这并没有给出预期的结果。

如何获取分组窗口的最后一个事件?

1 个答案:

答案 0 :(得分:0)

有“最后”聚合功能。由于它是聚合函数,因此group-by子句必须指定分组。

所以查询是....

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

还有“prev”功能可以为您提供您正在寻找的结果,而且不需要“分组依据”。