我已定义为架构
CREATE SCHEMA Sensor (
timestamp long
, machine_id string
, oil_temp_in double, oil_temp_out double
, oil_flow double, overshoot_angle double
)
CREATE SCHEMA Alarm ( machine_id string, ts_Start long
, ts_End long, type string )
警报检测基于某些具有传感器事件属性的条件。有几种类型。
CREATE SCHEMA AlarmRelevant ( machine_id string, ts long
, type string, source Alarm [] )
每个传感器/警报类型唯一的命名窗口,用于获取当天发生的警报数。
CREATE SCHEMA AlarmsPerDayAndType_Wnd (machine_id string, type string
, ts long, number integer, active boolean, source Alarm [] )
CREATE WINDOW wnd_AlarmsPerDayAndType.std:unique(machine_id,type) AS AlarmsPerDayAndType_Wnd;
当一天内发生超过15个相同类型和传感器的警报时,认为警报是相关的,我们需要采取前15个警报
我不知道如何初始化警报数组,并添加元素,当触发警报时,我尝试使用{}和{} .Union({a})但是我得到的错误是的收集
ON AlarmUC1 (ts_End IS NULL) a
MERGE wnd_AlarmsPerDayAndType w
WHERE a.type = w.type
WHEN MATCHED
THEN UPDATE
SET number = CASE WHEN a.ts_Start.roundFloor('day') = initial.ts.roundFloor('day')
THEN initial.number + 1
ELSE 1
END
, ...
, source
= CASE WHEN a.ts_Start.roundFloor('day') = initial.ts.roundFloor('day')
THEN initial.source.Union({a})***Error
ELSE {a} *** Error
END
WHEN NOT MATCHED THEN
INSERT (machine_id, type, ts, number, active, source)
SELECT a.machine_id,a.type,a.ts_Start,1,false, {a} *** Error
我的问题是: 如何在esper规则中操作(清空,添加,...)一个对象数组 或如何将事件的属性定义为另一个事件的集合。