wso2 cep Siddhiql

时间:2017-11-15 08:55:01

标签: wso2 siddhi

我有多个传感器将测量事件发送到流。事件由 {parameter,value,timestamp} 组成。我希望在几天的时间窗口内观察这些值,并检查趋势并对这些不同传感器监控的设备进行诊断。

  1. 按参数划分流。
  2.     from inputStream[parameter='A']
        select *
        insert into Astream;
    

    依此类推每个参数。

    1. 对于时间窗口,比如60秒,计算线性回归以找到变化。
    2.     from Astream#timeseries:lengthTimeRegress(60000, value, timestamp)
          select beta1 * 100 as AChange 
          insert into AChangeStream;
      

      我为每个度量标准流做了这个。 3.一旦我有每个流的趋势,我收集每个流的更改值并检查它们是否符合条件。

          from every e1=AChangeStream[e1.AChangeStream > 0.5], e2=BChangeStream[e2.BChangeStream  0.15]
          select 'condition 1 alarm' as message
          insert into alertStream;
      

      上面的siddhi ql会在时间窗口中检测出6个参数的变化吗?

1 个答案:

答案 0 :(得分:1)

您提供的查询的要点是正确的,除了您遗漏的一些小事。当你说6个参数时,我相信你有类似于参数A,B,C,D,E和F的东西。最终你似乎想找到一个与给定条件相匹配的事件序列[1]。

仅考虑2个参数A和B,您可以按照以下方式用Siddhi语言编写查询,以达到您的要求。


@Import('input:1.0.0')
define stream inputStream (parameter string, value double, timestamp long);    


from inputStream[parameter=='A']
select *
insert into Astream;    

from inputStream[parameter=='B']
select *
insert into Bstream;    

from Astream#timeseries:lengthTimeRegress(60000, 10000, value, timestamp)
select beta1*100 as AChange 
insert into AChangeStream;    

from Bstream#timeseries:lengthTimeRegress(60000, 10000, value, timestamp)
select beta1*100 as BChange 
insert into BChangeStream;    

from every e1=AChangeStream[e1.AChange > 0.5], e2=BChangeStream[e2.BChange > 0.15]
select 'condition 1 alarm' as message
insert into alertStream;


请注意以下事项。

  1. 在lengthTimeRegress函数中,您需要提供4个必需参数,如[2]中所述。您已经错过了您编写的查询中的批量大小。用于回归计算的最大事件数由批处理大小指定。
  2. 在序列条件中,您需要使用参数。不是流名称。您错误地写为e1.AChangeStream> 0.5必须改变为e1.AChange> 0.5
  3. [1] https://docs.wso2.com/display/CEP420/SiddhiQL+Guide+3.1#SiddhiQLGuide3.1-Sequence
    [2] https://docs.wso2.com/display/SIDDHIEXTENSIONS/Regression