代码之家  ›  专栏  ›  技术社区  ›  Gene Bo Krzysztof Dziuba

时间(t)和时间(t-1)的Esper EPL查询

  •  2
  • Gene Bo Krzysztof Dziuba  · 技术社区  · 14 年前

    我正在尝试实现一个EPL查询,它可以获取时间(t)和时间(t-1)的平均值。

    a) 前5秒(0-5秒)有2个事件,平均值为12

    b) 在接下来的5秒内(第5-10秒),有3个事件的平均值为23,在捕捉到该信息的EPL查询中,我还可以看到前5秒的上一个时间窗口中的平均值为12

    我的想法是交错对象/查询,以便最终的epl查询有一个时间(t)和时间(t-1)的快照,如之前虚拟创建的对象scoreinfoafter中所示。但是它不起作用。

    任何想法都将不胜感激。谢谢。

    ~~~~

    // The object being published to the Esper stream:
    class ScoreEvent { int score; ... }
    
    1 回复  |  直到 14 年前
        1
  •  7
  •   Gene Bo Krzysztof Dziuba    14 年前

    看起来像关键字 是解决办法。

    http://esper.codehaus.org/esper-2.1.0/doc/reference/en/html/functionreference.html

    见:

    根据我在原帖中描述的例子,这里是我找到的相应解决方案。它似乎工作正常。

    INSERT INTO ScoreInfo
    SELECT 
        'ScoreInfo' as a_Label, 
        average AS curAvg, 
        prior(1, average) AS prevAvg 
    FROM 
        ScoreEvent.win:time_batch(5 sec).stat:uni(score);
    
    
    SELECT
    *
    FROM
    ScoreInfo.win:length(1);
    


    很好,因为你可以做这样的事情:

    SELECT
        'GT curAvg > prevAvg' as a_Label, 
        curAvg, 
        prevAvg 
    FROM
        ScoreInfo.win:length(1)
    WHERE
        curAvg > prevAvg;
    
    
    SELECT
        'LTE curAvg <= prevAvg' as a_Label, 
        curAvg, 
        prevAvg 
    FROM
        ScoreInfo.win:length(1)
    WHERE
        curAvg <= prevAvg;
    
    推荐文章