wso2 cep Siddhiql



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

  1. 按参数划分流
来自inputStream[参数='A']选择*插入Astream

等等。

  1. 对于时间窗口,例如60秒,计算线性回归以找到变化
来自Astream#时间序列:lengthTimeRegress(60000,value,timestamp)选择beta1*100作为AChange插入AChangeStream

我对每个度量流都这样做。3.一旦我有了每个流的趋势,我就会收集每个流的变化值,并检查它们是否符合条件。

从每个e1=AChangeStream[e1.AChangeStream>0.5],e2=BChangeStream[e2.BChangeStream 0.15]选择"条件1报警"作为信息插入alertStream

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

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

只考虑2个参数A和B,您可以用Siddhi语言编写如下查询,以满足您的需求。

@导入('input:1.0.0')定义流inputStream(参数字符串,值双,时间戳长);来自inputStream[参数=='A']选择*插入Astream;来自inputStream[参数=='B']选择*插入Bstream;来自Astream#时间序列:lengthTimeRegress(60000,10000,value,timestamp)选择beta1*100作为AChange插入AChangeStream;来自Bstream#时间序列:lengthTimeRegress(60000,10000,value,timestamp)选择beta1*100作为BChange插入BChangeStream;从每个e1=AChangeStream[e1.AChange>0.5],e2=BChangeStream[e2.BChange>0.15]选择"条件1报警"作为信息插入alertStream

请注意以下内容。

  1. 在lengthTimeRegress函数中,您需要提供4个强制性参数,如[2]中所述。您在编写的查询中遗漏了批次大小。用于回归计算的最大事件数由批处理大小指定
  2. 在序列条件中,您需要使用一个参数。不是流名称。您错误地写为e1.AChangeStream>0.5的内容必须更改为e1.AChange>0.5

[1]https://docs.wso2.com/display/CEP420/SiddhiQL+Guide+3.1#SiddhiQLGuide3.1-Sequence
[2]https://docs.wso2.com/display/SIDDHIEXTENSIONS/Regression

最新更新