全部產品
Search
文件中心

IoT Platform:函數列表

更新時間:Sep 15, 2024

配置雲產品流轉過程中,您可以在編寫解析器指令碼時使用資料類型轉換函式、時間類型轉換函式、基礎資料類型函數和流轉資料到資料目的函數等方法,實現資料多樣化處理。本文介紹相關函數的運算式及其使用說明。

除本文支援的函數運算式外,雲產品流轉新版的解析器指令碼中還支援舊版的函數。詳細內容,請參見資料流轉支援的函數

資料類型轉換函式

運算式

說明

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,返回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)

流轉資料到Function Compute(FC)。

data:流轉到FC的資料。

資料轉寄到Function Compute(FC)

writeKafka(destinationId, payload, key)

流轉資料到訊息對列Kafka。

key:選擇性參數,流轉到Kafka Topic訊息中攜帶的key。

您可以在Kafka訊息消費端,通過標籤進行訊息路由。

資料轉寄到訊息佇列Kafka

writeMns(destinationId, payload)

流轉資料到Simple Message Queue (formerly MNS) (SMQ)

資料轉寄到Message Service(MNS)

writeMq(destinationId, payload, tag)

流轉資料到訊息佇列(RocketMQ)。

tag:選擇性參數。設定標籤後,所有通過該操作流轉到RocketMQ對應Topic裡的訊息都會攜帶該標籤。您可以在RocketMQ訊息消費端,通過標籤進行訊息過濾。

tag長度不超過128個字元,可以輸入常量或變數。

  • 常量支援輸入中文漢字、英文字母、數字。

  • 變數代表解析指令碼處理後的JSON資料中key對應的value值。如果取不到value值,則訊息不攜帶tag。

資料轉寄到訊息佇列RocketMQ

writeTableStore(destinationId, data,flowType)

流轉資料到Table Store(Tablestore)寬表模型。

  • data:寫入Table Store的資料。僅支援Map類型資料,其中鍵(Key)值對應表格列名,值(Value)對應列值。

    data中必須包含Tablestore的主鍵。

  • flowType:選擇性參數。設定非主鍵欄位的資料類型。

    • flowType為true時,非主鍵欄位都按照String資料類型流轉到Tablestore中。

    • flowType為false或不傳入時,非主鍵欄位按照對應值的資料類型流轉到Tablestore中。

資料轉寄到Table Store(Tablestore)寬表模型

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

流轉資料到Table Store(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": ""
    }
]);

參數的更多說明,請參見時序模型介紹

資料轉寄到Table Store(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)

流轉資料到另一個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說明

資料轉寄到其他Topic

writeLindorm(destinationId, timestamp, tags, fields)

流轉資料到時序資料庫(Lindorm)。

  • timestamp:時間戳記,表示該資料記錄對應的產生時間。

  • tags:標籤,表示指標項針對的具體對象屬性。一個標籤由一個標籤鍵(Key)和一個標籤值(Value)組成。Map類型資料。

  • fields:資料記錄,一條資料記錄可以有多個欄位值,表示指標項的不同對象。支援Object資料類型。

資料轉寄到雲原生多模資料庫Lindorm

基礎資料型別 (Elementary Data Type)支援的函數

  • 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);

相關文檔

  • 您可結合支援的指令碼文法,調用函數將資料流轉到資料目的地。指令碼的使用說明,請參見指令碼文法

  • 您可在配置資料轉寄到雲產品的解析器指令碼中使用以上函數,實現資料處理和轉寄。具體操作,請參見配置解析器