我是 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,但这还不够。
如果您能帮助我,我将不胜感激。