Как получить один выходной поток для нескольких операторов в 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. Это позволяет вам вставлять что-либо в поток, который является вариантным потоком, потому что нет необходимости в строгой типизации альтернативных потоков.