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屬性,重命名為weather,消息重組後進行轉發

經過該SQL處理的消息輸出如下消息

{
    "did": "102839",
    "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個查詢欄位
  • 支援常量數據插入,向原JSON數據中插入值
    • 支援插入數值型數據與字串型數據
    • 支援插入 內置函數 所取得值,均為字串型
    • 支援JSON嵌套插入,最多支援5層嵌套插入,如SELECT 1 as a.b.c.d.e
    • 插入操作時與原數據中的key同級同名時,覆蓋原有內容

SELECT使用示例列表如下:

原 JSON SQL語句 結果 說明
{} SELECT 1 as a {"a":1}
{} SELECT 'red' as a {"a":"red"}
{} SELECT '' as a {"a":""} 插入空字串
{} SELECT 1 as a.b {"a":{"b":1}} 嵌套插入
{"b":3} SELECT 1 as a {"a":1}
{"b":3} SELECT 'red' as a {"a":"red"}
{"b":3} SELECT '' as a {"a":""} 插入空字串
{"b":3} SELECT 1 as a.b {"a":{"b":1} 嵌套插入
{"b":3} SELECT *,1 as a {"b":3,"a":1}
{"b":3} SELECT *,'red' as a {"b":3,"a":"red"}
{"b":3} SELECT *,'' as a {"b":3,"a":""} 插入空字串
{"b":3} SELECT *,1 as a.b {"b":3,"a": {"b":1} 嵌套插入
{"c":3} SELECT *,1 as c {"c":1} 對同級同名key進行插入,執行覆蓋原有內容

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
/ 算術除法 105
* 算術乘法 25
% 取餘 207
小於 56
<= 小於等於 5<=6
> 大於 54
>= 大於等於 5>=4

个搜索结果,搜索内容 “

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