如何在Esper中自动更新表并从表中选择?

时间:2018-07-18 04:15:54

标签: esper

我创建了一个存储最新财务报价的表,我想在更新报价表后立即自动选择并计算满足某些条件的某些报价。

Esper中有什么方法可以满足此要求?


感谢user650839。我按照他的指示写了一个演示。该演示使用命名窗口而不是表。

此处定义了财务滴答事件:

public class Tick {

    private String symbol;
    private double bid;
    private double ask;
    private String datetime;

    // Constructor
    ......

    // getter / setter
    ......
}

下面显示了从命名窗口自动更新并选择的EPL语句:

// create the named window
create window tickWin#unique(symbol) as select * from Tick

// on-merge clause
on Tick as nt 
merge tickWin as wt 
where wt.symbol = nt.symbol 
when not matched 
    then insert select * 
when matched 
    then update set wt.bid = nt.bid, wt.ask = nt.ask, wt.datetime = nt.datetime 
    then insert into UpdatedTick select * 

// the output stream
select * from UpdatedTick 

此处显示了侦听器,将此侦听器添加到上述输出流中,只需打印出更新的tick事件。

public class TickListener implements UpdateListener {

    @Override
    public void update(EventBean[] newEvents, EventBean[] oldEvents) {

        if (newEvents == null || newEvents.length ==0) return;

        System.out.println(newEvents[0]);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用合并。它有多个动作

on <something>
merge <some named window or table>
where <some correlation>
when matched then
  update set <some value>
  insert into OutputStream select <some values>