规则引擎提供多种函数,您可以在编写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表达式。