当项目更新或过期时,是否可以区分已删除项目中的窗口?

时间:2015-08-06 16:18:34

标签: esper nesper

我是NESPER的新手,我有一个适用于StateEvent的应用程序(id字符串,ts long,State int)。该应用程序基于StateEvent的ts(Timestamp)提供的值。 可以根据某些条件修改StateEvent的state属性的值,如果我有3个应用程序分钟(-2,-1,0)并且每分钟至少有一个状态= 80,那么所有状态都是分钟-1, 必须更改为其他值:80

我已经定义了

CREATE  SCHEMA  State_Evnt_Strm     (id string, ts long, state integer, tsMin_0 long, tsMin_1 long) ;
CREATE  SCHEMA  State_Strm          (id string, ts long, state integer, tsMin_0 long, tsMin_1 long) ;

CREATE window   wnd_3m_State.win:ext_timed(tsMin_0, 3 min) AS State38_a_Wnd ; 

UPDATE istream  wnd_3m_State 
    SET tsMin_0 = ts.roundFloor('min'), tsMin_1 = ts.roundFloor('min') - 60000;

ON State38_a_Strm  p 
    INSERT INTO wnd_3m_State (id , state, ts, tsMin_0 , tsMin_1 ) 
    SELECT  id
        ,   state
        ,   ts
        ,   tsMin_0
        ,   tsMin_1 ;

ON PATTERN  [every  a=wnd_3m_State (state = 80)
                ->  b=wnd_3m_State (state = 80, b.tsMin_1 = a.tsMin_0) 
                ->  c=wnd_3m_State (state = 80, c.tsMin_1 = b.tsMin_0  )]
    MERGE   wnd_3m_Driving  w 
    WHERE   b.id = w.id 
    WHEN    MATCHED     and tsMin_0 = b.tsMin_0 and state <> 80
    THEN    UPDATE      SET state   = 80


    SELECT  rstream
            id
        ,   state
        ,   ts
        ,   tsMin_0
    FROM    wnd_3m_State p
    ORDER BY tsMin_0, ts    ;

在最后一个子句中,我需要过滤以仅选择窗口中已过期的状态,而不是通过合并(删除/插入)修改的状态,这可能吗? 我不知道是否有另一种方法从窗口获取过期的项目而不是使用rstream,但它还不够。

如果你能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以在合并时通过使用接收事件的函数在插入流事件本身中设置一些值,并在其上设置一些标志,表明它已合并。