本文以高温报警(传感器温度>80度时,输出报警信息到本地文件中)的场景为例,详细说明如何使用SQL进行流数据分析作业的编写以及流数据分析作业如何运作。
流程图如下所示。
前提条件
请您确保已创建边缘实例,具体操作请参见专业版环境搭建。
一、添加设备
参考设备模拟器章节中使用设备模拟器驱动部分的内容,创建一个使用设备模拟器驱动的设备,并将设备分配到边缘实例中。
说明 将设备分配到边缘实例后,请先不要部署边缘实例,待完成其他操作后统一部署边缘实例。
二、添加流数据分析任务
- 创建、设置并发布流数据任务,具体操作请参见流数据任务开发。
其中,开发类型选择SQL,运行环境选择边缘。
- 系统自动进入流数据任务开发SQL工作台。
复制如下SQL内容到编辑框中。
-- 温度>80时,输出报警信息到本地文件中 -- 定义数据源表,源表会驱动流数据分析作业的运行。 -- 每个流数据分析作业必须提供至少一个流式数据存储。 create table property ( -- 定义源表输入字段 propertyName varchar, -- 属性名 propertyValue varchar, -- 属性值 productKey varchar, deviceName varchar, ts varchar, -- 数据产生的时间,由设备产生,即设备属性变化发生的时间 gmtCreate varchar -- 流引擎接收到数据的时间,大于事件时间 ) with ( type = 'edgebus', -- 定义了源表类型,edgebus表示从边缘消息总线获取数据(json格式的字符串) jsonParser = 'device_property' -- 定义了json字符串解析器,device_property表示使用设备属性json解析器解析,不符合设备属性json格式的数据会被丢弃 ); -- 定义数据结果表,用于存储流数据分析的计算结果。 -- 每个流数据分析作业必须提供至少一个结果表。 create table file ( -- 定义结果表输出字段 productKey varchar, deviceName varchar, temperature double, -- 温度值 ts timestamp, -- 数据产生的时间 gmtCreate timestamp -- 流引擎接收到数据的时间 ) with ( type = 'file', -- 定义了结果表类型,edgebus表示将结果输出到文件中 filePath = '/linkedge/run/debug/case01_high_temperature_alarm.txt' -- 定义了输出的文件路径 ); -- insert语句定义具体的执行逻辑,源表收到数据后会触发这段逻辑的执行 insert into file -- 将结果输出到结果表(文件) select productKey, deviceName, cast (propertyValue as double), -- propertyValue默认类型是字符,温度值为浮点类型,需要做数据转化 to_timestamp (cast (ts as bigint)), -- 将数据产生的utc时间转为timestamp to_timestamp (cast (gmtCreate as bigint)) -- 将流引擎接收到数据的时间转为timestamp from property -- 将源表接收到的设备属性数据拿出来处理 where propertyName = 'temperature' -- 通过属性名过滤出包含温度值的数据 and cast (propertyValue as double) > 80; -- 塞选出温度值>80的数据
- 保存任务并发布。
- 将该SQL任务分配到边缘实例中,具体操作请参见分配流数据分析到边缘实例。
三、添加消息路由
在边缘实例的实例详情页面,选择消息路由,将温度传感器的属性变化数据路由到高温报警的流数据分析作业中,具体操作请参见设置消息路由。
四、部署边缘实例
- 在边缘实例的实例详情页面,单击部署,将子设备、流数据分析作业及消息路由下发到边缘端。
- 在实例详情页面网关页签,单击网关名称右侧的远程SSH终端,打开两个远程控制台,例如远程控制台1和远程控制台2。远程控制台1用于改变温度传感器温度值,远程控制台2用于查看计算结果。
说明 需要您先打开网关名称右侧的远程访问按钮,远程SSH终端才可以使用。
- 在远程控制台1,进入/linkedge/gateway/build/bin目录,执行如下命令:
./ds_ctrl property a1WuxHr**** temperatureSensor01 '{"temperature":70}'
- 在远程控制台2,执行
tail -f /linkedge/run/debug/case01_high_temperature_alarm.txt
命令 ,查看输出结果。此时因为设备温度只达到了70,因此不会输出任何信息。 - 在远程控制台1,执行如下命令。
./ds_ctrl property a1WuxHr**** temperatureSensor01 '{"temperature":90}'
此时温度已经超过了80,可在远程控制台2可看到如下信息。
2019-01-24 18:09:48.490 -> a1WuxHr****,temperatureSensor01,90.0,2019-01-24 18:09:48.456,2019-01-24 18:09:48.464
说明
- 流数据分析作业部署到边缘端后,会先解析
create table
语句,即源表和结果表的定义。在本例中,源表定义解析完成之后会开始监听边缘消息总线,结果表定义解析后会尝试打开文件。 - 流数据分析作业会一直处于运行的状态,只要接收到边缘消息路由的数据(在本例中为温度传感器的属性变化数据)就会立即执行具体的逻辑,即执行
insert
语句。
文档内容是否对您有帮助?