函数列表

配置云产品流转过程中,您可以在编写解析器脚本时使用数据类型转换函数、时间类型转换函数、基础数据类型函数和流转数据到数据目的函数等方法,实现数据多样化处理。本文介绍相关函数的表达式及其使用说明。

除本文支持的函数表达式外,云产品流转新版的解析器脚本中还支持旧版的函数。详细内容,请参见数据流转支持的函数

数据类型转换函数

表达式

说明

toBoolean(Object)

Object值转换为Boolean值。参数支持以下类型的取值:

  • Boolean:返回对应的布尔值。

  • Number:参数为0,返回false。否则,返回true。

  • String:参数为"true",返回true。否则,返回false。

  • 参数值为null:返回false。

toNumber(Object)

Object值转换为Number值。参数支持以下类型的取值:

  • Boolean:参数为true,返回1,参数为false,返回0。

  • Number:返回对应的数值。

  • String:按照数值类型解析。

  • 参数值为null:返回0。

toString(Object)

Object值转换为String值。

参数值类型不限,返回对应String类型值。参数值为null,返回空字符。

当参数为二进制类型时,按照UTF-8编码返回对应值。

toMap(Object)

Object值转换为Map值。参数支持以下类型的取值:

  • Map:返回对应的值。

  • String:按照JSON格式解析为Map。

  • 参数值为null:返回空Map。

toArray(Object)

Object值转换为Array值。参数支持以下类型的取值:

  • Array:返回对应的值。

  • String:按照JSON格式解析为Array。

  • 参数值为null:返回空Array。

toBinary(Object)

Object值转换为二进制值。参数支持以下类型的取值:

  • Binary:返回对应的值。

  • String:按照UTF-8编码返回值。

  • 参数值为null:返回空Binary。

时间类型转换函数

函数表达式

说明

format_date(timestamp, patten, timeZone)

将时间戳毫秒值转换为指定格式的时间。返回String类型的时间。

  • timestamp:时间戳毫秒值。

  • patten:待转换的时间格式。例如yyyy-MM-dd HH:mm:ss

  • timeZone:时区。例如GMT、UTC、CST等。建议主动设置时区,若未设置,默认为北京时间(GMT+8)。

to_timestamp(dateString, patten, timeZone)

将指定格式的时间转换为时间戳毫秒值。返回数值类型的时间戳。

  • dateString:时间字符串。

  • patten:指定的时间格式。例如yyyy-MM-dd HH:mm:ss

  • timeZone:时区。例如GMT、UTC、CST等。建议主动设置时区,若未设置,默认为北京时间(GMT+8)。

流转数据到数据目的函数

以下函数表达式中的入参destinationId是数据目的ID,payload是消息内容。

函数表达式

说明

示例

writeAmqp(destinationId, payload, tag)

流转数据到AMQP消费组。

tag:可选参数。设置tag后,所有通过该操作流转到AMQP服务端订阅消费组里的消息都会携带该tag

tag长度不超过128个字符,可以输入常量或变量。

  • 常量支持输入中文汉字、英文字母、数字。

  • 变量代表解析脚本处理后的JSON数据中key对应的value值。如果取不到value值,则消息不携带tag。

数据转发到AMQP服务端订阅消费组消费

writeDatahub(destinationId, data)

流转数据到DataHub。

data:写入DataHub的数据。仅支持Map和Binary类型数据。

数据转发到DataHub

writeFc(destinationId, data)

流转数据到函数计算(FC)。

data:流转到FC的数据。

数据转发到函数计算(FC)

writeKafka(destinationId, payload, key)

流转数据到消息对列Kafka。

key:可选参数,流转到Kafka Topic消息中携带的key。

您可以在Kafka消息消费端,通过标签进行消息路由。

数据转发到消息队列Kafka

writeMns(destinationId, payload)

流转数据到轻量消息队列(原 MNS) SMQ(Simple Message Queue (formerly MNS))

数据转发到消息服务(MNS)

writeMq(destinationId, payload, tag)

流转数据到消息队列(RocketMQ)。

tag:可选参数。设置标签后,所有通过该操作流转到RocketMQ对应Topic里的消息都会携带该标签。您可以在RocketMQ消息消费端,通过标签进行消息过滤。

tag长度不超过128个字符,可以输入常量或变量。

  • 常量支持输入中文汉字、英文字母、数字。

  • 变量代表解析脚本处理后的JSON数据中key对应的value值。如果取不到value值,则消息不携带tag。

数据转发到消息队列RocketMQ

writeTableStore(destinationId, data,flowType)

流转数据到表格存储(Tablestore)宽表模型。

  • data:写入表格存储的数据。仅支持Map类型数据,其中键(Key)值对应表格列名,值(Value)对应列值。

    data中必须包含Tablestore的主键。

  • flowType:可选参数。设置非主键字段的数据类型。

    • flowType为true时,非主键字段都按照String数据类型流转到Tablestore中。

    • flowType为false或不传入时,非主键字段按照对应值的数据类型流转到Tablestore中。

数据转发到表格存储(Tablestore)宽表模型

writeTableStoreTs(destinationId, timeInUs, metricName, tags, fields, dataSource)

流转数据到表格存储(Tablestore)时序模型。

  • timeInUs:时间戳,表示该数据记录对应的生成时间。单位为微秒。整型数据。

  • metricName:时间线数据所度量的物理量或者监控指标的名称。字符串类型数据。

  • tags:时间线的标签信息。Map类型数据。标签的key和value为字符串类型数据。

  • fields:时间线数据。Map类型数据。在一个时间点上可以设置多个数据值。每个值对应数据库中的一列,包括列名和列值。

    列名为字符串类型数据;列值可为布尔型、整型、浮点型、字符串类型和二进制类型的数据。

  • dataSource:产生时间线的数据源标识,字符串类型数据。仅该参数可以为空。

该函数表达式是单行写入数据至Tablestore,您可使用下面表达式,写入多行数据:

writeTableStoreTs(destinationId, [
    {
        "timeInUs": timestamp() * 1000,
        "metricName": "name1",
        "tags":{},
        "fields":{},
        "dataSource": ""
    },
    {
        "timeInUs": timestamp() * 1000,
        "metricName": "name2",
        "tags":{},
        "fields":{},
        "dataSource": ""
    }
]);

参数的更多说明,请参见时序模型介绍

数据转发到表格存储(Tablestore)时序模型

writeRds(destinationId, data)

流转数据到云数据库RDS,新增数据到云数据库表。

data:写入云数据库表的数据。仅支持Map类型数据,其中键(Key)值对应数据库表列名,值(Value)对应列值。

数据转发到云数据库RDS

updateRds(destinationId, data, condition, limit)

流转数据到云数据库RDS,更新已写入云数据库表中的数据。

  • data:更新写入云数据库表的数据。仅支持Map类型数据,其中键(Key)值对应数据库表列名,值(Value)对应列值。

  • condition:更新数据的条件,不可空。仅支持String类型,作为SQL语句的WHERE条件。例如:a = 3 and b = 3

  • limit:更新数据的限制行数,可为空。默认为1行,最大值为50。

例如:

  • 如果满足condition的有多行数据,默认从SQL返回结果的第一行数据开始更新。limit为1,更新第一行数据。limit为10,更新第一行至第10行数据。

  • 如果满足condition的仅一行数据,则仅更新一行数据。

writeTsdb(destinationId, timestamp, metricName, value, tag)

流转数据到时序数据库(TSDB)中。

  • timestamp:时间戳。

  • metricName:TSDB中存储的指标名称。

  • value:TSDB中存储的数据点值。支持String和Map类型数据。

  • tag:设置标记数据的标签键值对,Map类型数据。

数据转发到时序数据库(TSDB)

writeIotTopic(destinationId, topic, payload, deviceName)

流转数据到另一个Topic。

  • Topic:数据转发目的地Topic,支持以下Topic。

    • 自定义Topic:该自定义Topic的设备操作权限需为订阅,即所属设备可订阅这个Topic,获取转发的消息。

    • 物模型数据下发Topic:/sys/${productKey}/${deviceName}/thing/service/property/set。该Topic为设备接收设置属性值指令的Topic,设备从该Topic接收转发数据,并根据数据内容,设置属性值。用于目的地Topic所属设备根据转发的数据更改属性值的场景。

    Topic中${productKey}必须与destinationId对应数据目的中设置的产品相同。函数中Topic必须指定具体Topic,不支持使用通配符。

    更多信息,请参见步骤一:创建数据目的

    重要

    目的地Topic所属设备若未订阅该Topic,则收不到转发的消息。

    例如使用MQTT.fx工具接入物联网平台的设备A,不会自动订阅设备Topic,若设备B向设备A的Topic:thing/service/property/set转发数据,而设备A未手动订阅该Topic,则设备A收不到设备B转发的消息。

    设备Topic自动订阅的详细说明,请参见自动订阅Topic说明

  • deviceName:对于开源MQTT托管形态下产品和设备,及MQTT云网关产品和设备,流转数据到另一个Topic时,需传入该参数。其他业务场景不可以传入该参数。

    数据格式为Map类型,Key为"deviceName",Value为deviceName(),表示发送该Topic消息的设备名称。

    更多说明,请参见消息通信说明

重要

MQTT云网关产品和设备下,流转的数据目的Topic仅支持自定义Topic,且不支持跨产品流转,即仅支持流转到当前产品下的自定义Topic。

MQTT型实例下,仅支持创建一个产品,默认不支持跨产品流转。

数据转发到其他Topic

writeLindorm(destinationId, timestamp, tags, fields)

流转数据到时序数据库(Lindorm)。

  • timestamp:时间戳,表示该数据记录对应的生成时间。

  • tags:标签,表示指标项针对的具体对象属性。一个标签由一个标签键(Key)和一个标签值(Value)组成。Map类型数据。

  • fields:数据记录,一条数据记录可以有多个字段值,表示指标项的不同对象。支持Object数据类型。

数据转发到云原生多模数据库Lindorm

writePolarDB(destinationId, data)

流转数据到云原生数据库PolarDB MySQL版。

data:写入云数据库表的数据。仅支持Map类型数据,其中键(Key)值对应数据库表列名,值(Value)对应列值。

数据转发到云原生数据库PolarDB MySQL版

基本数据类型支持的函数

  • Map类型。

    表达式

    说明

    [Object]

    获取指定键(Key)对应的Value

    size()

    获取Map数据中键值对的数量。

    containsKey(String)

    判断Map数据中是否包含指定的键。

    keySet()

    获取Map数据中键的集合,返回类型为Array。

    remove(Object)

    移除Map数据中指定键对应的键值对。

    put(Object, Object)

    在Map数据中添加键值对。

    putAll(map)

    在Map数据中批量添加一组Map数据。

  • Array类型。

    函数

    说明

    [int]

    获取指定索引位置的值。数组首位的索引值为0。

    contains(Object)

    判断数组中是否包含指定元素。

    remove(Object)

    移除数组中指定的元素。

    removeAt(int)

    移除数组中指定索引位置的元素。

    add(Object)

    在数组末尾中添加元素。

    add(index, Object)

    在对应index索引位置添加元素。

    addAll(array)

    在数组中添加另一个数组。

    size()

    获取数组中元素个数。

  • String类型。

    函数

    说明

    substring(start, end)

    截取从start位置到end-1位置的字符串。end不传时,截取到字符串末尾。

    length()

    获取字符串长度。

    split(String)

    按照分割字符,分割字符串。

    startsWith(String)

    查看字符串是否以指定的字符串开头。

    endsWith(String)

    查看字符串是否以指定的子字符串结尾。

    indexOf(String, index)

    从指定index索引位置开始,指定字符串在字符串中首次出现的位置。

    index不传入,默认为0。

其他函数

表达式

说明

endWith(input, suffix)

判断字符串input中是否以字符串suffix结尾。

返回结果类型为布尔型。

productKey()

返回当前产品的ProductKey值。

getDeviceTag(key)

返回key所对应的设备标签。如果设备没有该key对应的标签,则返回值为空。

getOrNull(data, "items", ......)

返回JSON格式数据data中指定字段的值。

该函数中传入的字段个数没有限制,但必须逐级传入。函数返回最后一个字段的值,若最后一个字段不存在或值为空,则函数返回值为null。

例如data中数据:

"items": {
    "Humidity": {
        "value": 25,
        "time": 1626948134319
    }
}

函数示例如下:

  • getOrNull(data, "items")返回字段items"Humidity": {"value": 25,"time": 1626948134319}

  • getOrNull(data, "items", "Humidity", "value")返回字段value25

  • getOrNull(data, "items", "Temperature"),字段Temperature不存在,返回值null。

payload(textEncoding)

返回设备发布消息payload的转义数据。textEncoding表示payload的转义字符编码,取值如下:

  • 不传入参数:默认按照UTF-8编码转换为字符串,即payload()等价于payload('utf-8')

  • 'json':将payload数据转换成Map格式变量。如果payload不是JSON格式,则返回异常。

  • 'binary':将payload数据转换成二进制变量进行透传。

parseNumber(numberString, radix)

将字符串numberString按指定的进制radix转换为数字。

radix为可选参数,取值如下:

  • 10(默认):将字符串转换为十进制数字。

  • 2:将字符串转换为二进制数字。

  • 16:将字符串转换为十六进制数字。

例如:

// 设备上报数据。
var content = '0xFF';
// 获取待转换字符串FF.
var x = content.substring(2);
// 将FF转换为16进制数字。
var value = parseNumber(x, 16);

相关文档

  • 您可结合支持的脚本语法,调用函数将数据流转到数据目的地。脚本的使用说明,请参见脚本语法

  • 您可在配置数据转发到云产品的解析器脚本中使用以上函数,实现数据处理和转发。具体操作,请参见配置解析器