Как получить один выходной поток для нескольких операторов в Esper?

Я новичок в Esper и пытаюсь получить результаты нескольких EPStatements для запуска через один и тот же UpdateListener. Например:

EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();
EPStatement avgStatement = epService.getEPAdministrator()
                        .createEPL("select avg(price) from OrderEvent.win:time(30 sec)");
EPStatement sumStatement = epService.getEPAdministrator()
                        .createEPL("select sum(price) from OrderEvent.win:time(60 sec)");

Можно ли объединить результаты обоих этих заявлений в отдельном заявлении? Что-то вроде:

EPStatement bothStatements = epService.getEPAdministrator()
                            .createEPL("select * from avg(price), sum(price) where a.id=b.id");
bothStatements.addListener(listener);

Я попытался вставить оба оператора в именованное окно Esper, но кажется, что я не могу сделать что-то вроде этого, где:

  • Событие = (id, itemName, цена)
  • Statement1 = (id, avg)
  • Statement2 = (id, sum)
  • Именованное окно = (id, avg, sum)

Я хотел бы иметь возможность объединить результаты нескольких операторов и получить набор результатов (для каждого события) в один выходной поток.

Спасибо за помощь.

1 ответ

Решение

Считаете ли вы, что один и тот же слушатель может быть прикреплен к двум утверждениям. Я имею в виду "avgStatement.addListener(myListener)" и "sumStatement.addListener(myListener)".

В качестве альтернативы вы можете использовать insert-into для заполнения того же потока. Это будет выглядеть так: "вставить в MyStream выберите avg(цена) как avgPrice, 0 как sumPrice from ..." и "вставить в MyStream выберите 0 как avgprice, sum(цена) как sumPrice from ...".

Существует также концепция потока вариантов, подобного типам вариантов, в Visual Basic. Это позволяет вам вставлять что-либо в поток, который является вариантным потоком, потому что нет необходимости в строгой типизации альтернативных потоков.

Другие вопросы по тегам