强制表达式上的esper流输出

时间:2014-10-02 13:49:43

标签: esper nesper

我有一个关于拉动市场数据的esper查询。它看起来像

select * from L1Quote(Symbol='MSFT')

当新报价发生时,这将触发。我需要第一个引用/事件来做一些初始设置。对于每秒触发事件/引号的符号,这是没有问题的,但对于某些符号,您将赢得一分钟的新报价事件。

在假设在设置此表达式之前存在引用事件的情况下工作。 有没有办法在首次解析表达式时强制输出?即有没有办法说,当表达式开始时,给我最后一个事件?

2 个答案:

答案 0 :(得分:1)

您只需创建一个窗口来存储最新的报价,然后对其进行查询。

在你的Esper EPL:

//the L1Quote event definition
create schema L1Quote(Symbol string, ...)

//create a window with the same definition as L1Quote and it retain the latest event by Symbol
create window L1Quotes.std:unique(Symbol) as select * from L1Quote

//insert all incoming quotes into the window we created
insert into L1Quotes select * from L1Quote

您的客户端需要同时查询窗口并订阅它:

//subscribe to quote updates
EPStatement statement = epAdmin.createEPL("select * from L1Quotes(Symbol='MSFT')");
statement.addListener([my listener]);

//get the latest quote
epEngine.executeQuery("select * from L1Quotes(Symbol='MSFT')");

答案 1 :(得分:0)

Esper不会在内存中保留旧事件(除非您的EPL使用数据窗口或模式指定)。因此,根据您提供的查询,它没有过去的事件。