【问题标题】:Esper EPL statement each time a value has increased a multipleEsper EPL 语句每次一个值增加一个倍数
【发布时间】:2015-09-28 19:47:37
【问题描述】:

我正在寻找一个 EPL 语句,它在每次某个值增加指定数量时触发一个事件,其间有任意数量的事件,例如: 考虑一个流,它不断提供新的价格。 我想收到通知,例如如果价格大于第一个价格 + 100。类似

select * from pattern[a=StockTick -> every b=StockTick(b.price>=a.price+100)];

但是,如果增加 >= 200、>=300 等等,如何意识到我得到了下一个事件?

到目前为止,上下文和窗口的各种测试尚未成功,因此感谢您的帮助!谢谢!

【问题讨论】:

    标签: esper epl


    【解决方案1】:

    上下文将是正确的方法。 你可以先定义一个这样的开始事件:

    create schema StartEvent(threshold int);
    

    然后有使用开始事件的上下文:

    create context ThresholdContext inititiated by StartEvent as se
         terminated after 5 years
    
    context ThresholdContext select * from pattern[a=StockTick -> every b=StockTick(b.price>=context.se.threshold)];
    

    您可以使用“insert into”从同一模式生成 StartEvent(可能希望删除“every”),或者让侦听器发送 StartEvent 或声明另一个仅触发一次以创建 StartEvent 的模式。

    【讨论】:

    • 感谢您的回答。不幸的是,我仍然不太清楚。考虑以下价格值 - 事件应始终触发,其中 x 为:0 StartEvent 30 99 100 X 101 103 130 199 200 X 201 260 301 X
    • context ThresholdContext insert into StartEvent select a.price + 100 as price from pattern[a=StockTick -> b=StockTick(b.price>=context.se.threshold)] // 即当模式匹配使用“a”的价格并添加 100 并使其成为新的开始事件,如果需要也更改“终止者”
    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 2022-10-05
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多