2016-07-06 136 views
0

我想一些帮助来模型化在艾斯波我的问题一个月的测量:Cumulocity /艾斯波:聚合所有天/周/每天/每周/每月

创建测量在一天内多次,在结束每天,我想汇总所有这种类型的测量数据,按当天创建的数据源进行分组,然后进行计数和求和,然后重新注入新的测量数据。我会在本周结束时和本月底做同样的事情。

问题是我不知道如何将cron表达式(例如每天午夜说),时间窗口(说我想要过去一天的所有事件)和事件流(to选择我想要的类型的测量值)。

感谢您的洞察力。我认为

回答

0

最好的方法是定义一个上下文这样的持续时间:

create context DailyMeasurementAggregation 
    context DailySourcePartition 
    partition by measurement.source.value from MeasurementCreated, 
    context DailyTimerPartition 
    start (0,0,*,*,*,0) 
    end (59,23,*,*,*,59); 


context DailyMeasurementAggregation 
select 
    count(m) as count, 
    sum(getNumber(m, "myMeasurement.M.value")) as sum 
from MeasurementCreated m 
where getObject(m, "myMeasurement.M") is not null 
output last when terminated; 

的其他范围的cron的语法是这样的: 周刊:启动(0,0,, 0,0)结束(59,23,,6,59) 月:开始(0,0,1,,0)结束(59,23,最后,,59)

本周刊是周日到周六,所以你可能需要调整数字。以下是关于cron语法的esper文档中的一部分:http://www.espertech.com/esper/release-5.2.0/esper-reference/html/event_patterns.html#pattern-timer-at

我试图在1天后做一些类似于结束的事情,但这看起来不起作用,因为那么每隔一天只有一个上下文。这就是为什么我在1秒前结束了上下文。

+0

您好TyrManuZ,再次感谢您的回答。我想到了这一点,这个想法唯一的问题是,在重启服务器的情况下,上下文中的所有数据都将丢失,并且由于我的上下文很长(一个月),我认为它发生的风险可能太高。 –

+0

Cumulocity即将支持esperha,它将在服务器重新启动后恢复此类语句的状态。这将解决问题。 – TyrManuZ

+0

只有其他选项是在'pattern [每个定时器:在(0,0,*,*,*,0)]上触发'并使用函数从数据库查询整个数据,然后计算值 – TyrManuZ

相关问题