規則引擎提供多種函數,您可以在編寫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時,需將溫度屬性資料流轉到Function Compute中進行計算處理。設定篩選裝置上報資料的規則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運算式。