FlinkCEP: Могу ли я сослаться на более раннее событие, чтобы определить последующее совпадение?

Вот простой пример:

val pattern = 
   Pattern.begin[Event]("start").where(_.getId == 42).
   next("middle").subtype(classOf[SubEvent]).where(x => x.getVolume == **first event matched**.getVolume) ...

По сути, второму событию («среднему») необходимо получить доступ к состоянию первого события («начало»). Можно ли сделать это в FlinkCEP, не требуя внешнего состояния?


person marios    schedule 23.03.2019    source источник


Ответы (1)


Конечно. Вы можете получить события по определенному шаблону с помощью Context.

new IterativeCondition<Event>() {
            private static final long serialVersionUID = 8061969839441121955L;

            @Override
            public boolean filter(Event value, IterativeCondition.Context<Event> ctx) throws Exception {
                double sum = 0.0;
                for (Event e : ctx.getEventsForPattern("middle")) {
                    sum += e.getPrice();
                }
                return sum > 5.0;
            }
        }
person Jiayi Liao    schedule 23.03.2019