我有一个关于拉动市场数据的esper查询。它看起来像
select * from L1Quote(Symbol='MSFT')
当新报价发生时,这将触发。我需要第一个引用/事件来做一些初始设置。对于每秒触发事件/引号的符号,这是没有问题的,但对于某些符号,您将赢得一分钟的新报价事件。
在假设在设置此表达式之前存在引用事件的情况下工作。 有没有办法在首次解析表达式时强制输出?即有没有办法说,当表达式开始时,给我最后一个事件?
答案 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使用数据窗口或模式指定)。因此,根据您提供的查询,它没有过去的事件。