java - 制作简单的 Esper 平均查询

标签 java sql esper

我对 Esper 非常陌生,我刚刚完成了教程,所以我有很多疑问。

我正在尝试进行一个查询来计算所有数据源接收到的信息的平均值。

首先,我有一个简单的查询,它只打印出我收到的所有内容:

select * from pattern [every e=MyClass.Event]

然后我的下一步是计算平均值:

select avg(cast(value, float)) from pattern [every e=MyClass.Event]

但是然后我收到一个错误:

[ERROR] [2013-12-16 17:12:16,959] [qtp1609813298-11] net.jnd.thesis.helper.RoutesWrapper  - Error starting statement: Property named 'value' is not valid in any stream [select avg(cast(value, float)) from pattern [every e=net.jnd.thesis.camel.bean.CamelInternalEvent(sid=0 and sid<1387214056883)]]

这基本上意味着在使用这种格式时,我无法访问属性值。我知道流只包含 float ,因此我尝试了另一个版本的查询来计算所有内容的平均值:

select avg(*) from pattern [every e=MyClass.Event]

这也不起作用,因为显然使用 avg(*) 是不正确的语法。

我已经重新阅读了网站上的快速入门和教程,但找不到任何可以帮助我的内容。如何编写一个查询来计算从所有数据源收到的所有值的 AVG、Median 或 STDDEV?

最佳答案

在您告诉 esper 您在 esper 配置文件中使用的类之后。

<?xml version="1.0" encoding="UTF-8"?>
<esper-configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xmlns="http://www.espertech.com/schema/esper">

<event-type name="MyClass" class="package.MyClass"/>
</esper-configuration> 

您应该能够轻松处理事件流并计算平均值:

select avg(value) from MyClass

其中 value 是 MyClass 的公共(public)属性,或者具有 getValue 形式的 getter。请注意,您需要以某种方式获取平均数据。一个简单的方法是在创建语句时使用 update(float) 方法注册一个对象。每次收到新事件时,Esper 都会使用新的平均值来调用此值。还有类似的example statement在 Esper 解决方案模式页面上,计算每分钟数据的平均值。您的问题不清楚为什么需要模式表达式,所以我省略了它。

关于java - 制作简单的 Esper 平均查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617516/

相关文章:

java - 如何将 SharedPreferences 与微调器一起使用

java - 奇怪的 java.util.calendar 输出

where 子句中带有相关子查询的 SQL 查询

java - esper 根据事件开始时间固定窗口

java - java中的植入关联类

java - 如何同时更改JLabel文本和JButton位置

mysql - 通过express发布到mysql数据库时出错

sql - PostgreSQL - 同时向多个表中插入数据

java - Esper:如何对温度过高做出即时 react ,并且每30秒快照一次?

java - 我如何通过 esper 订购 Activity ?