【问题标题】:Cumulocity/Esper: Aggregate all day/week/month's measurements every day/week/monthCumulocity/Esper:每天/每周/每月汇总所有天/周/月的测量值
【发布时间】:2016-07-06 18:26:05
【问题描述】:

我需要一些帮助来模拟我在 Esper 中的问题:

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

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

感谢您的洞察力。

【问题讨论】:

    标签: esper cumulocity


    【解决方案1】:

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

    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,last,,,59)

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

    我尝试在 1 天后执行类似结束的操作,但这似乎不起作用,因为每隔一天才有一个上下文。这就是我提前 1 秒结束上下文的原因。

    【讨论】:

    • 您好 TyrManuZ,再次感谢您的回答。我想了想,这个想法的唯一问题是,在重新启动服务器的情况下,上下文中的所有数据都会丢失,而且由于我的上下文会很长(一个月),我认为它发生的风险可能太高了。
    • Cumulocity 将很快支持 esperha,它将在服务器重新启动后恢复此类语句的状态。这将解决问题。
    • 唯一的其他选择是在pattern[every timer:at(0,0,*,*,*,0)] 上触发并使用函数从数据库中查询整个数据,然后计算值
    • 然后我回到第一个问题,因为我不知道如何将它与时间窗口和事件流结合起来^^但是如果我的问题是,我会尝试你的解决方案很快就支持了应该没问题!无论如何,非常感谢你花时间在这里回答我!
    • 既然你不能用 cron 语法说“本月的最后一天”,我可以使用上下文 DailyTimerPartition start (0,0,1,,,0) end (0,0,1,,,0) 还是上下文一开始就会结束?
    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多