如何操作esper规则中的对象数组,或者如何将事件的属性定义为另一个事件的集合

时间:2016-10-25 17:57:50

标签: esper

我已定义为架构

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规则中操作(清空,添加,...)一个对象数组 如何将事件的属性定义为另一个事件的集合。

0 个答案:

没有答案