OneNET物联网平台 平台介绍 入门手册 设备开发指南 应用开发指南
API
API使用 API列表 SDK MQTT LwM2M EDP Modbus TCP
消息队列MQ HTTP推送
服务定价 扩展服务 常见问题 发布公告

SQL语句

OneNET将系统的基础消息格式设计为json格式,其数据可以映射为虚拟的表,数据中的Key对应表的列,Value对应列值,规则引擎支持SQL语句对该数据进行处理,如下图所示:

示例

消息源选择为设备数据点消息,基础消息格式示例如下:

{
    "sysProperty": {
        "messageType": "deviceDatapoint",
        "productId": "90273",
    },
    "appProperty":{
        "deviceId": "102839",
        "dataTimestamp": 15980987429000,
        "datastream":"weather"
    },
    "body":{
        "temperature": 30,
        "humidity": "47%"
    }
}

SQL示例:

SELECT appProperty.deviceId as did, body as weather FROM /deviceDatapoint/ds WHERE body.temperature > 10

该SQL语句表示:

筛选设备上传数据点的消息,当body的value大于10的时候,提取 appProperty.deviceId 属性,并重命名为 did;提取body属性,重命名为temperature ,消息重组后进行转发

经过该SQL处理的消息输出如下消息

{
    "did": "90273",
    "weather": {
        "temperature": 30,
        "humidity": "47%"
    }
}

SELECT

  • 默认为 *,即不做任何提取与重组操作
  • 支持 as,可对提取出的属性进行重命名,示例如下:
    SELECT body as temperature
    
  • 支持使用 json path 获取嵌套 json 中的属性值,示例如下:
    SELECT appProperty.deviceId as did
    
  • 支持通过逗号(,) 进行多个属性的提取与重命名,示例如下:
    SELECT appProperty.deviceId as did, appProperty.dataTimestamp as t
    
  • 不支持子SQL查询
  • SELECT语句中的最多支持10个查询字段

WHERE

WHERE语句用于定义规则触发条件

  • 支持使用 json path 获取嵌套 json 中的属性值,同SELECT,示例如下:
    SELECT * WHERE body.temperature > 10
    
  • 支持对数值类型进行大于、小于、等于判断,示例如下:
    SELECT * WHERE body.temperature = 10
    
  • 支持对字符类型进行匹配判断,示例如下:
    SELECT * WHERE body.humidity = '47%'
    
  • 支持多个表达式的 "与" "或"条件运算,示例如下:
    SELECT * WHERE body.temperature > 10 AND body.temperature < 30
    
    表达式支持详情见下表

条件表达式支持列表

操作符说明举例
=相等temperature=20
!=不等于temperature!=20
AND逻辑与temperature=20 AND country='CN'
OR逻辑或temperature=20 OR country='CN'
( )括号中表达式优先计算temperature=20 AND (country='CN' OR online = true)
+算术加法4+5
-算术减法5-4
/算术除法10/5
*算术乘法2*5
%取余20%7
<小于5<6
<=小于等于5<=6
>大于5>4
>=大于等于5>=4

个搜索结果,搜索内容 “

    0 个搜索结果,搜索内容 “