如何在Esper中为多个语句获取一个输出流?

时间:2015-03-07 20:08:50

标签: esper complex-event-processing

我是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)");

是否可以将这两个EPStatements的结果合并为一个单独的声明?类似的东西:

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

我尝试将两个语句插入到Esper命名窗口中,但似乎我不能做这样的事情:

  • 事件=(id,itemName,price)
  • Statement1 =(id,avg)
  • Statement2 =(id,sum)
  • 命名窗口=(id,avg,sum)

我希望能够将多个语句的结果组合在一起,并将一组结果(每个事件)放入一个输出流中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您是否认为可以将同一个侦听器附加到两个语句中。我的意思是“avgStatement.addListener(myListener)”和“sumStatement.addListener(myListener)”。

作为替代方法,您可以使用insert-into填充相同的流。这将是“插入到MyStream中选择平均值(价格)为avgPrice,0为sumPrice from ...”和“插入MyStream选择0为avgprice,sum(price)为sumPrice from ...”。

在visual basic中还有变体流的概念,如变体类型。这允许您将任何内容插入到变体流的流中,因为变体流不需要强类型化。