1

我目前有一个订单对象。我们可以假设它具有三个字段,分别称为 orderId、state 和 price。

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

在订单的整个生命周期中,状态和填充数量都会发生变化。每次发生字段更改时,我们通过以下方式将其推送到 esper 运行时:

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

现在,每次通过 SendEvent 添加订单时,它的对象都与前一个订单对象不同(即不是引用)。这意味着旧的订单对象不应再在流中供语句查看

我希望像下面这样的语句只对流中订单的最新版本进行操作,即从概念上讲,流中的每个物理订单应该只有一个订单对象。

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

有没有办法删除旧的 Order 对象?我可以使用引用,所以我只需更新旧的订单对象,然后再次推送它吗?有没有别的办法??

我目前正在使用Nesper

4

2 回答 2

1

您可以创建一个包含唯一事件的命名窗口(旧的重复项被驱逐)

就像是 :

"create window OrderWin.std:unique(orderId) as Order"
"insert into "OrderWin select * from Order"
"select * from OrderWin where ..."
于 2014-03-28T17:26:14.453 回答
0

另一个答案是改变窗口。保留所有事件可能不是您想要的。尝试使用不同的窗口,例如...

假设您只想要每个交易品种的最后一笔交易。您可以执行以下操作:

select * from tradeEvent.std:unique(symbol)

这仅保留与给定符号匹配的每个事件的最后一个事件。

于 2014-06-25T00:08:22.393 回答