流数据异常检测引擎输出的时间不对

发布于 2022-09-12 04:15:35 字数 1317 浏览 16 评论 0

在传感器监控系统中,我用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,结果如下:
image

这个时间1970.01.19不对,应该是当前时间。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

调妓 2022-09-19 04:15:35

warningTable流表time列的数据类型不对,应为DATETIME。

按照DolphinDB用户手册中对创建异常检测引擎函数createAnomalyDetectionEngine各参数的说明,异常引擎对输出表的格式有严格要求,即它的第一列必须是时间类型,用于存放检测到异常的时间戳,并且该列的数据类型需与输入表的时间列一致。如果keyColumn(分组列)参数不为空,那么第二列为keyColumn,在本例中,分组列为传感器编号deviceID。之后的两列分别为int类型和string/symbol类型,用于记录异常的类型(在metrics中的下标)和异常的内容。建表代码如下:

share streamTable(1000:0, `time`deviceID`anomalyType`anomalyString, [DATETIME,INT,INT, SYMBOL]) as warningTable
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文