規則引擎提供多種函數,您可以在編寫SQL時使用這些函數,實現多樣化數據處理。
數據流轉支持的函數
函數名 | 函數說明 |
abs(number) | 返回絕對值。 |
asin(number) | 返回number值的反正弦。 |
attribute(key) | 返回key所對應的設備標簽。如果設備沒有該key對應的標簽,則返回值為空。使用SQL調試時,因為沒有真實設備及對應的標簽,返回值為空。 |
concat(string1, string2) | 用于連接字符串。返回連接后的字符串。 示例: |
cos(number) | 返回number值的余弦。 |
cosh(number) | 返回number值的雙曲余弦(hyperbolic cosine)。 |
crypto(field,String) | 對field的值進行加密。 第二個參數String為算法字符串。可選:MD2、MD5、SHA1、SHA-256、SHA-384、SHA-512。 |
deviceName() | 返回當前設備名稱。使用SQL調試時,因為沒有真實設備,返回值為空。 |
endswith(input, suffix) | 判斷input的值是否以suffix結尾。 |
exp(number) | 返回以自然常數e為底的指定次冪。 |
floor(number) | 返回一個最接近它的整數,它的值小于或等于這個浮點數。 |
log(n, m) | 返回自然對數。 如果不傳m值,則返回 |
lower(string) | 返回小寫字符串。 |
mod(n, m) | n%m余數。 |
nanvl(value, default) | 返回屬性值。 若屬性值為null,則返回default。 |
newuuid() | 返回一個隨機UUID字符串。 |
payload(textEncoding) | 返回設備發布消息的payload轉義字符串。 字符編碼默認UTF-8,即 |
power(n,m) | 返回n的m次冪。 |
rand() | 返回 |
replace(source, substring, replacement) | 對某個目標列值進行替換,即用replacement替換source中的substring。 示例: |
sin(n) | 返回n值的正弦。 |
sinh(n) | 返回n值的雙曲正弦(hyperbolic sine)。 |
tan(n) | 返回n值的正切。 |
tanh(n) | 返回n值的雙曲正切(hyperbolic tangent)。 |
thingPropertyFlatMap(property) | 獲取物模型屬性對應數值,并去掉item層級,value有多個時,使用“_”拼接。當物模型屬性多于50個時,云產品流轉無法流轉全量物模型屬性,使用該函數可以拉平物模型屬性結構,實現全量物模型屬性流轉。 property為需要獲取的屬性,可以傳入多個property,為空則表示提取所有屬性。 示例:使用 |
timestamp(format) | 返回當前系統時間,格式化后返回北京時間(GMT+8)。 format為可選。如果為空,則返回當前系統時間戳毫秒值,例如,使用 |
timestamp_utc(format) | 返回當前系統時間,格式化后返回UTC時間。 format為可選。如果format為空,則返回當前系統時間戳毫秒值,例如,使用 |
topic(number) | 返回Topic分段信息。 如,有一個Topic: |
upper(string) | 將字符串中的小寫字母轉為大寫字母。 示例:函數 |
to_base64(*) | 當原始Payload數據為二進制數據時,可使用該函數,將所有二進制數據轉換成base64String。 |
messageId() | 返回物聯網平臺生成的消息ID。 |
substring(target, start, end) | 返回從start(包括)到end(不包括)的字符串。 參數說明:
說明
字符串截取示例:
|
to_hex(*) | 當原始Payload數據為二進制數據時,可使用該函數,將二進制數據轉換成十六進制字符串。 |
user_property() | 設備使用MQTT 5.0協議通信時,獲取UserProperty列表中的屬性數據。
例如設備上報的UserProperty為
|
things_function_type() | 獲取上報的物模型功能類型。僅對物模型事件和服務的消息生效。各功能返回值如下:
例如Topic: |
things_property('${參數名稱}') | 獲取物模型屬性、服務、事件中參數對應的值。僅對物模型消息生效。 例如Topic: |
使用示例
您可以在數據流轉SQL語句的SELECT字段和WHERE條件字段中,使用函數獲取數據或者對數據做處理。
例如,某溫度傳感器產品功能定義的默認模塊有一個溫度屬性(Temperature),設備上報的溫度屬性數據經物模型轉化后的數據格式如下:
{
"deviceType": "Custom",
"iotId": "H5KURkKdibnZvSls****000100",
"productKey": "a1HHrkm****",
"gmtCreate": 1564569974224,
"deviceName": "TestDevice1",
"items": {
"Temperature": {
"value": 23.5,
"time": 1564569974229
}
}
}
該溫度傳感器產品下有多個設備,但只有當設備TestDevice1、TestDevice2或TestDevice3上報的溫度大于38時,需將溫度屬性數據流轉到函數計算中進行計算處理。設置篩選設備上報數據的規則SQL如下圖。
SQL語句:
SELECT deviceName() as deviceName,things_property('Temperature') as Temperature
FROM "/g5or0***/+thing/event/property/post"
WHERE things_property('Temperature')>38 and deviceName() in ('TestDevice1', 'TestDevice2', 'TestDevice3')
以上示例中,使用了函數deviceName()、things_property('Temperature'):
在SELECT字段使用以上函數,表示從數據中篩選出設備名稱,和屬性Temperature的值。
在條件字段使用以上函數,并指定為
>38
、in ('TestDevice1', 'TestDevice2', 'TestDevice3')
,表示僅當Temperature值大于38,且設備名稱的值為TestDevice1、TestDevice2或TestDevice3中的其中一個時,才會進行數據流轉。
規則SQL中,SELECT字段和WHERE條件字段的具體編寫方法,和規則引擎支持的條件表達式列表,請參見SQL表達式。