流数据异常检测引擎输出的时间不对
在传感器监控系统中,我用DolphinDB流数据异常检测引擎实现2分钟内若温度传感器出现2次40度以上,一次30度以上就报警的功能时,碰到报警输出时间不对的问题,代码如下:
login("admin","123456")
st=streamTable(1000000:0,`deviceID`ts`temperature`speed,[INT,DATETIME,FLOAT,INT])
enableTableShareAndPersistence(st,`sensor,false, true, 1000000)
//创建报警表
share streamTable(1000:0, `time`deviceID`anomalyType`anomalyString, [TIMESTAMP,INT,INT, SYMBOL]) as warningTable
//创建异常检测引擎,2分钟内,温度传感器出现2次40度以上,一次30度以上,报警
engine = createAnomalyDetectionEngine(name="engine1", metrics=<[sum(temperature > 40) > 2 && sum(temperature > 30) > 0 ]>,dummyTable=sensor, outputTable=warningTable, timeColumn=`ts,keyColumn=`deviceID ,windowSize= 120,step=30)
subscribeTable(tableName="sensor", actionName="sensorAnomalyDetection", offset=0,handler= append!{engine}, msgAsTable=true)
//模拟写入流表
def writeData(){
deviceNum = 3
for (i in 0:600) {
data = table(take(1..deviceNum,deviceNum) as deviceID ,take(now().datetime(),deviceNum) as ts,rand(10..41,deviceNum) as temperature,rand(2000..3000,deviceNum) as speed)
sensor.append!(data)
sleep(1000)
}
}
submitJob("simulateData", "simulate sensor data", writeData)
执行后,查询报警表warningTable,结果如下:
这个时间1970.01.19不对,应该是当前时间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
warningTable流表time列的数据类型不对,应为DATETIME。
按照DolphinDB用户手册中对创建异常检测引擎函数createAnomalyDetectionEngine各参数的说明,异常引擎对输出表的格式有严格要求,即它的第一列必须是时间类型,用于存放检测到异常的时间戳,并且该列的数据类型需与输入表的时间列一致。如果keyColumn(分组列)参数不为空,那么第二列为keyColumn,在本例中,分组列为传感器编号deviceID。之后的两列分别为int类型和string/symbol类型,用于记录异常的类型(在metrics中的下标)和异常的内容。建表代码如下: