AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

函数

您可以使用 SQL 表达式的 SELECT 或 WHERE 子句中的以下内置函数。

abs(Decimal)

返回数字的绝对值。SQL 版本 2015-10-8 及更高版本支持。

示例:abs(-5) 返回 5。

参数类型 结果
Int Int,参数的绝对值。
Decimal Decimal,参数的绝对值。
Boolean Undefined
String Decimal。结果是参数的绝对值。如果字符串无法转换,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

accountid()

String 形式返回拥有该规则的账户的 ID。SQL 版本 2015-10-8 及更高版本支持。

例如:

accountid() = "123456789012"

acos(Decimal)

以弧度形式返回数字的反余弦值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:acos(0) = 1.5707963267948966

参数类型 结果
Int Decimal (双精度),参数的反余弦值。虚数结果返回 Undefined
Decimal Decimal (双精度),参数的反余弦值。虚数结果返回 Undefined
Boolean Undefined
String Decimal,参数的反余弦值。如果字符串无法转换,则结果为 Undefined。虚数结果返回 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

asin(Decimal)

以弧度形式返回数字的反正弦值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:asin(0) = 0.0

参数类型 结果
Int Decimal (双精度),参数的反正弦值。虚数结果返回 Undefined
Decimal Decimal (双精度),参数的反正弦值。虚数结果返回 Undefined
Boolean Undefined
String Decimal (双精度),参数的反正弦值。如果字符串无法转换,则结果为 Undefined。虚数结果返回 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

atan(Decimal)

以弧度形式返回数字的反正切值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:atan(0) = 0.0

参数类型 结果
Int Decimal (双精度),参数的反正切值。虚数结果返回 Undefined
Decimal Decimal (双精度),参数的反正切值。虚数结果返回 Undefined
Boolean Undefined
String Decimal,参数的反正切值。如果字符串无法转换,则结果为 Undefined。虚数结果返回 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

atan2(Decimal, Decimal)

以弧度的形式返回 x 轴正方向与由两个参数定义的 (x, y) 点之间的角度。 逆时针的角,角度为正数 (上半平面,y > 0),顺时针的角,角度为负数 (下半平面,y < 0)。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:atan2(1, 0) = 1.5707963267948966

参数类型 参数类型 结果
Int/Decimal Int/Decimal Decimal (双精度),x 轴和指定的 (x,y) 点之间的角度。
Int/Decimal/String Int/Decimal/String Decimal,所描述点的反正切值。如果字符串无法转换,则结果为 Undefined
其他值 其他值 Undefined

aws_lambda(functionArn, inputJson)

调用指定的 Lambda 函数并将 inputJson 传递给 Lambda 函数,并且返回 Lambda 函数生成的 JSON。

参数

参数 描述
functionArn

要调用的 Lambda 函数的 ARN。Lambda 函数必须返回 JSON 数据。

inputJson

传递到 Lambda 函数的 JSON 输入。

您必须授予 AWS IoT lambda:InvokeFunction 权限以调用指定的 Lambda 函数。以下示例说明如何使用 AWS CLI 授予 lambda:InvokeFunction 权限:

aws lambda add-permission --function-name "function_name" --region "region" --principal iot.amazonaws.com --source-arn arn:aws:iot:us-east-1:account_id:rule/rule_name --source-account "account_id" --statement-id "unique_id" --action "lambda:InvokeFunction"

add-permission 命令的参数如下:

--function-name

Lambda 函数的名称,您正在通过添加新的权限来更新其资源策略。

--region

您的账户所处的 AWS 区域。

--principal

获取权限的委托人。这应该是 iot.amazonaws.com,以授予 AWS IoT 调用 Lambda 函数的权限。

--source-arn

规则的 ARN。您可以使用 get-topic-rule CLI 命令来获取规则的 ARN。

--source-account

定义规则的 AWS 账户。

--statement-id

唯一的语句标识符。

--action

要在此语句中允许的 Lambda 操作。在本示例中,我们要允许 AWS IoT 调用 Lambda 函数,因此我们指定 lambda:InvokeFunction

注意

如果您在不提供源 ARN 的情况下为 AWS IoT 委托人添加权限,则所有通过 Lambda 操作创建规则的 AWS 账户都可以触发从 AWS IoT 调用 Lambda 函数的规则。

有关更多信息,请参阅 Lambda 权限模型

以下规则说明如何调用 aws_lambda 函数:

SELECT aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", payload.inner.element).some.value as output FROM 'a/b'

payload.inner.element 从在主题“a/b”上发布的消息选择数据。

some.value 从 Lambda 函数生成的输出中选择数据。

注意

规则引擎限制 Lambda 函数的执行持续时间。从规则执行的 Lambda 函数调用应在 2000 毫秒内完成。

bitand(Int, Int)

在两个 Int (转换成的) 参数的位表示之间逐位执行与运算。SQL 版本 2015-10-8 及更高版本支持。

示例:bitand(13, 5) = 5

参数类型 参数类型 结果
Int Int Int,对两个参数逐位执行与运算。
Int/Decimal Int/Decimal Int,对两个参数逐位执行与运算。所有非 Int 数字向下舍入至最近的 Int。如果任意参数不能转换为 Int,则结果为 Undefined
Int/Decimal/String Int/Decimal/String Int,对两个参数逐位执行与运算。所有字符串转换为 Decimal 并向下舍入至最近 Int。如果转换失败,结果为 Undefined
其他值 其他值 Undefined

bitor(Int, Int)

在两个参数的位表示之间逐位执行或运算。SQL 版本 2015-10-8 及更高版本支持。

示例:bitor(8, 5) = 13

参数类型 参数类型 结果
Int Int Int,对两个参数逐位执行或运算。
Int/Decimal Int/Decimal Int,对两个参数逐位执行或运算。所有非 Int 数字向下舍入至最近的 Int。如果转换失败,结果为 Undefined
Int/Decimal/String Int/Decimal/String Int,对两个参数逐位执行或运算。所有字符串转换为 Decimal 并向下舍入至最近 Int。如果转换失败,结果为 Undefined
其他值 其他值 Undefined

bitxor(Int, Int)

在两个 Int (转换成的) 参数的位表示之间逐位执行异或运算。SQL 版本 2015-10-8 及更高版本支持。

示例:bitor(13, 5) = 8

参数类型 参数类型 结果
Int Int Int,对两个参数逐位执行异或运算。
Int/Decimal Int/Decimal Int,对两个参数逐位执行异或运算。非 Int 数字向下舍入至最近的 Int
Int/Decimal/String Int/Decimal/String Int,对两个参数逐位执行异或运算。String 将转换为 Decimal 并向下舍入至最近的 Int。如果任何转换失败,结果为 Undefined
其他值 其他值 Undefined

bitnot(Int)

Int (转换成的) 参数的位表示逐位执行非运算。SQL 版本 2015-10-8 及更高版本支持。

示例:bitnot(13) = 2

参数类型 结果
Int Int,对参数逐位执行非运算。
Decimal Int,对参数逐位执行非运算。Decimal 值会向下舍入至最近的 Int
String Int,对参数逐位执行非运算。String 将转换为 Decimal 并向下舍入至最近的 Int。如果任何转换失败,结果为 Undefined
其他值 其他值。

cast()

将值从一个数据类型转换为另一个数据类型。强制转换的行为在大多数情况下与标准转换相似,增加了在数字与 Boolean 值之间强制转换的功能。如果 AWS IoT 无法确定一种类型如何强制转换为另一种类型,则结果为 Undefined。SQL 版本 2015-10-8 及更高版本支持。格式:cast( as 类型)。

例如:

cast(true as Decimal) = 1.0

在调用 cast 时“as”后面可以出现以下关键字:

对于 SQL 版本 2015-10-8 和 2016-03-23

Keyword 结果
Decimal 将值强制转换为 Decimal
Bool 将值强制转换为 Boolean
Boolean 将值强制转换为 Boolean
String 将值强制转换为 String
Nvarchar 将值强制转换为 String
文本 将值强制转换为 String
Ntext 将值强制转换为 String
varchar 将值强制转换为 String
Int 将值强制转换为 Int
整数 将值强制转换为 Int

此外,对于 SQL 版本 2016-03-23

Keyword 结果
Decimal 将值强制转换为 Decimal
Bool 将值强制转换为 Boolean
Boolean 将值强制转换为 Boolean

强制转换规则:

强制转换为 Decimal

参数类型 结果
Int 没有小数点的 Decimal
Decimal 源值。
Boolean true = 1.0,false = 0.0。
String 会尝试将字符串解析为 Decimal。我们将尝试解析字符串来匹配正则表达式:^-?\d+(\.\d+)?((?i)E-?\d+)?$。可自动转换为 DecimalString 示例包括 "0"、"-1.2"、"5E-12"。
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

强制转换为 Int

参数类型 结果
Int 源值。
Decimal 源值,向下舍入到最近的 Int
Boolean true = 1.0,false = 0.0。
String 会尝试将字符串解析为 Decimal。我们将尝试解析字符串来匹配正则表达式:^-?\d+(\.\d+)?((?i)E-?\d+)?$。可自动转换为 Decimal} 的 String 示例包括 "0"、"-1.2"、"5E-12"。我们会尝试将字符串转换为 Decimal,然后向下舍入到最近的 Int
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

强制转换为 Boolean

参数类型 结果
Int 0 = False,任何非零值 = True。
Decimal 0 = False,任何非零值 = True。
Boolean 源值。
String "true" = True 和 "false" = False (不区分大小写)。其他字符串值 = Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

强制转换为 String

参数类型 结果
Int 标准表示法中 Int 的字符串表示。
Decimal 科学表示法中 Decimal 值的字符串表示。
Boolean "true" 或 "false",全小写。
String "true"=True 和 "false"=False (不区分大小写)。其他字符串值 = Undefined
数组 数组序列化为 JSON。结果字符串为逗号分隔的列表,括在方括号中。String 用引号括起来。DecimalIntBoolean 不必如此。
Object 序列化为 JSON 的对象。JSON 字符串为键值对的逗号分隔列表,以大括号开始并结束。String 用引号括起来。DecimalsIntBooleanNull 不必如此。
Null Undefined
未定义 Undefined

ceil(Decimal)

将给定的 Decimal 向上舍入到最近的 Int。SQL 版本 2015-10-8 及更高版本支持。

示例:

ceil(1.2) = 2

ceil(11.2) = -1

参数类型 结果
Int Int,参数值。
Decimal IntDecimal 值向上舍入到最近的 Int
String Int。字符串将转换为 Decimal 并向上舍入到最近的 Int。如果字符串无法转换为 Decimal,则结果为 Undefined
其他值 Undefined

chr(String)

返回给定 Int 参数对应的 ASCII 字符。SQL 版本 2015-10-8 及更高版本支持。

示例:

chr(65) = "A".

chr(49) = "1".

参数类型 结果
Int 与指定的 ASCII 值对应的字符。如果参数不是有效的 ASCII 值,则结果为 Undefined
Decimal 与指定的 ASCII 值对应的字符。Decimal 参数会向下舍入至最近的 Int。如果参数不是有效的 ASCII 值,则结果为 Undefined
Boolean Undefined
String 如果 String 可以转换为 Decimal,则向下舍入到最近的 Int。如果参数不是有效的 ASCII 值,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
其他值 Undefined

clientid()

返回发送消息的 MQTT 客户端的 ID,如果未通过 MQTT 发送消息,则返回 n/a。SQL 版本 2015-10-8 及更高版本支持。

例如:

clientid() = "123456789012"

concat()

联接数组或字符串。该函数可接受任意数量的参数,并返回 StringArray。SQL 版本 2015-10-8 及更高版本支持。

示例:

concat() = Undefined

concat(1) = "1".

concat([1, 2, 3], 4) = [1, 2, 3, 4]。

concat([1, 2, 3], "hello") = [1, 2, 3, "hello"]

concat("con", "cat") = "concat"

concat(1, "hello") = "1hello"

concat("he","is","man") = "heisman"

concat([1, 2, 3], "hello", [4, 5, 6]) = [1, 2, 3, "hello", 4, 5, 6]

参数数量 结果
0 Undefined
1 不经修改返回参数。
2+

如果任意参数为 Array,那么结果为包含所有参数的一个数组。如果没有参数为 Array,并且至少有一个参数为 String,则结果是所有参数的 String 表示的联接。参数将使用上文列出的标准转换被转换为 String

cos(Decimal)

以弧度形式返回数字的余弦值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

例如:

cos(0) = 1.

参数类型 结果
Int Decimal (双精度),参数的余弦值。虚数结果返回 Undefined
Decimal Decimal (双精度),参数的余弦值。虚数结果返回 Undefined
Boolean Undefined
String Decimal (双精度),参数的余弦值。如果字符串无法转换为 Decimal,则结果为 Undefined。虚数结果返回 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

cosh(Decimal)

以弧度形式返回数字的双曲余弦值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:cosh(2.3) = 5.037220649268761。

参数类型 结果
Int Decimal (双精度),参数的双曲余弦值。虚数结果返回 Undefined
Decimal Decimal (双精度),参数的双曲余弦值。虚数结果返回 Undefined
Boolean Undefined
String Decimal (双精度),参数的双曲余弦值。如果字符串无法转换为 Decimal,则结果为 Undefined。虚数结果返回 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

encode(value, encodingScheme)

根据编码方案,使用 encode 函数将负载(可能是非 JSON 数据)编码为字符串表示形式。SQL 版本 2016-03-23 及更高版本支持。

AWS IoT SQL 参考 中所定义的任何有效的表达式。此外,您还可以指定 * 以对整个负载进行编码,无论它是否为 JSON 格式。如果您提供了表达式,评估结果将在编码之前首先转换为字符串。

encodingScheme

代表您要使用的编码方案的文字字符串。目前仅支持 'base64'

endswith(String, String)

返回 Boolean 来表示第一个 String 参数是否以第二个 String 参数结尾。如果任一参数为 NullUndefined,则结果为 Undefined。SQL 版本 2015-10-8 及更高版本支持。

示例:endswith("cat","at") = true。

参数类型 1 参数类型 2 结果
String String 如果第一个参数以第二个参数结尾,则为 true。否则为 false。
其他值 其他值 两个参数都使用标准转换规则被转换为 String。如果第一个参数以第二个参数结尾,则为 true。否则为 false。如果任一参数为 NullUndefined,则结果为 Undefined

exp(Decimal)

返回 e 的 Decimal 参数次方。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:exp(1) = e.

参数类型 结果
Int Decimal (双精度),e ^ 参数。
Decimal Decimal (双精度),e ^ 参数。
String Decimal (双精度),e ^ 参数。如果 String 无法转换为 Decimal,则结果为 Undefined
其他值 Undefined

get

从一个集合数据类型 (数组、字符串、对象) 中提取值。第一个参数不会进行任何转换。根据表中的记载对第二个参数进行转换。SQL 版本 2015-10-8 及更高版本支持。

示例:

get(["a", "b", "c"], 1) = "b"

get({"a":"b"}, "a") = "b"

get("abc", 1) = "b"

参数类型 1 参数类型 2 结果
数组 任何类型 (转换为 Int) 在第二个参数 (已经转换为 Int) 提供的 Array 中,从零开始索引得到的项目。如果转换已不成功,结果为 Undefined。如果索引超出 Array 的范围 (负值或大于等于数组长度),则结果为 Undefined
字符串 任何类型 (转换为 Int) 在第二个参数 (已经转换为 Int) 提供的字符串中,从零开始索引得到的字符。如果转换已不成功,结果为 Undefined。如果索引超出字符串的范围 (负值或大于等于字符串长度),则结果为 Undefined
Object String (不进行转换) 第一个参数对象中存储的值与作为第二个参数提供的字符串键相对应。
其他值 任意值 Undefined

get_thing_shadow(thingName, roleARN)

返回指定事物的影子。SQL 版本 2016-03-23 及更高版本支持。

thingName

String:您要检索其影子的事物的名称。

roleArn

String:具有 iot:GetThingShadow 的 ARN 角色。

例如:

SELECT * from 'a/b'

WHERE get_thing_shadow("MyThing","arn:aws:iam::123456789012:role/AllowsThingShadowAccess") .state.reported.alarm = 'ON'

哈希函数

AWS IoT 提供了以下哈希函数:

  • md2

  • md5

  • sha1

  • sha224

  • sha256

  • sha384

  • sha512

所有哈希函数都可以输入一个字符串参数。结果为该字符串的哈希值。对非字符串参数进行标准字符串转换。所有哈希函数在 SQL 版本 2015-10-8 及更高版本中均受支持。

示例:

md2("hello") = "a9046c73e00331af68917d3804f70655"

md5("hello") = "5d41402abc4b2a76b9719d911017c592"

indexof(String, String)

返回第二个参数的第一个索引 (从零开始) 作为第一个参数的子字符串。两个参数均为字符串。如果参数数据类型不是字符串,则应用标准字符串转换规则进行转换。此函数只对字符串有效,不适用于数组。SQL 版本 2015-10-8 及更高版本支持。

示例:

indexof("abcd", "bc") = 1

isNull()

返回该参数是否为 Null 值。SQL 版本 2015-10-8 及更高版本支持。

示例:

isNull(5) = false.

isNull(Null) = true.

参数类型 结果
Int false
Decimal false
Boolean false
String false
Array false
Object false
Null true
Undefined false

isUndefined()

返回该参数是否为 Undefined。SQL 版本 2015-10-8 及更高版本支持。

示例:

isUndefined(5) = false.

isNull(floor([1,2,3]))) = true.

参数类型 结果
Int false
Decimal false
Boolean false
String false
Array false
Object false
Null false
Undefined true

length(String)

返回输入字符数中的字符数。对非 String 参数应用标准转换规则。SQL 版本 2015-10-8 及更高版本支持。

示例:

length("hi") = 2

length(false) = 5

ln(Decimal)

返回参数的自然对数。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:ln(e) = 1。

参数类型 结果
Int Decimal (双精度),参数的自然对数。
Decimal Decimal (双精度),参数的自然对数。
Boolean Undefined
String Decimal (双精度),参数的自然对数。如果字符串无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

log(Decimal)

返回参数的以 10 为底的对数。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:log(100) = 2.0。

参数类型 结果
Int Decimal (双精度),参数以 10 为底的对数。
Decimal Decimal (双精度),参数以 10 为底的对数。
Boolean Undefined
String Decimal (双精度),参数以 10 为底的对数。如果 String 无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

lower(String)

返回给定 String 的小写版本。非字符串参数使用标准转换规则转换为 String。SQL 版本 2015-10-8 及更高版本支持。

示例:

lower("HELLO") = "hello"。

lower(["HELLO"]) = "[\"hello\"]"。

lpad(String, Int)

返回 String 参数,在输入参数的左侧填充由第二个参数指定的数量的空格。Int 参数必须介于 0 到 1000 之间。如果输入的值在这一有效范围之外,则参数将被设置为与其最近的值 (0 或 1000)。SQL 版本 2015-10-8 及更高版本支持。

示例:

lpad("hello", 2) = " hello"。

lpad(1, 3) = " 1"

参数类型 1 参数类型 2 结果
String Int String,在输入 String 左侧填充由 Int 指定的数量的空格。
String Decimal Decimal 参数将向下舍入到最近的 Int,并在 String 左侧填充指定数量的空格。
String String 第二个参数将被转换为 Decimal,向下舍入到最近的 Int,并在 String 左侧填充指定数量的空格。如果第二个参数无法转换为 Int,则结果为 Undefined
其他值 Int/Decimal/String 第一个值将使用标准转换规则转换为 String,然后对该 String 应用 LPAD 函数。如果它无法转换,则结果为 Undefined
任意值 其他值 Undefined

ltrim(String)

从输入的 String 中删除所有前导空白 (制表符和空格)。SQL 版本 2015-10-8 及更高版本支持。

例如:

Ltrim(" h i ") = "hi "。

参数类型 结果
Int Int 在删除所有前导空白之后的 String 表示。
Decimal Decimal 在删除所有前导空白之后的 String 表示。
Boolean 布尔值 ("true" 或 "false") 在删除所有前导空白之后的 String 表示。
String 删除所有前导空白的参数。
数组 Array (使用标准转换规则) 删除所有前导空白之后的 String 表示。
Object 对象 (使用标准转换规则) 删除所有前导空白之后的 String 表示。
Null Undefined
未定义 Undefined

machinelearning_predict(modelId)

利用 machinelearning_predict 函数,并根据 Amazon Machine Learning (Amazon ML) 模型使用来自 MQTT 消息的数据进行预测。SQL 版本 2015-10-8 及更高版本支持。machinelearning_predict 函数的参数如下:

modelId

对其运行预测的模型的 ID。必须启用模型的实时终端节点。

roleArn

IAM 角色,拥有具备 machinelearning:Predictmachinelearning:GetMLModel 权限的策略并允许访问运行预测所针对的模型。

record

要传递到 Amazon ML 预测 API 的数据。该参数应表示为单层 JSON 对象。如果记录是多级 JSON 对象,该记录将通过序列化值来进行平展。例如,以下 JSON:

{ "key1": {"innerKey1": "value1"}, "key2": 0}

会变为:

{ "key1": "{\"innerKey1\": \"value1\"}", "key2": 0}

该函数返回具有以下字段的 JSON 对象:

predictedLabel

基于模型的输入分类。

details

包含以下属性:

PredictiveModelType

模型类型。有效值为 REGRESSION、BINARY、MULTICLASS。

Algorithm

Amazon ML 用于预测的算法。该值必须为 SGD。

predictedScores

包含与每个标签对应的原始分类分数。

predictedValue

Amazon ML 预测的值。

mod(Decimal, Decimal)

返回第一个参数除以第二个参数的余数。SQL 版本 2015-10-8 及更高版本支持。您还可以使用“%”作为相同取模功能的插入运算符。SQL 版本 2015-10-8 及更高版本支持。

示例:mod(8, 3) = 2。

左侧操作数 右侧操作数 输出
Int Int Int,第一个参数对第二个参数取模。
Int/Decimal Int/Decimal Decimal,第一个参数对第二个操作数取模。
String/Int/Decimal String/Int/Decimal 如果所有字符串转换为 Decimal,则结果为第一个参数对第二个参数取模的值。否则为 Undefined
其他值 其他值 Undefined

nanvl(AnyValue, AnyValue)

如果第一个参数为有效的 Decimal,则返回第一个参数。否则返回第二个参数。SQL 版本 2015-10-8 及更高版本支持。

示例:Nanvl(8, 3) = 8。

参数类型 1 参数类型 2 输出
未定义 任意值 第二个参数。
Null 任意值 第二个参数。
Decimal (NaN) 任意值 第二个参数。
Decimal (非 NaN) 任意值 第一个参数。
其他值 任意值 第一个参数。

newuuid()

返回随机的 16 字节 UUID。SQL 版本 2015-10-8 及更高版本支持。

示例: newuuid() = 123a4567-b89c-12d3-e456-789012345000

numbytes(String)

返回输入字符串 UTF-8 编码中的字节数。对非 String 参数应用标准转换规则。SQL 版本 2015-10-8 及更高版本支持。

示例:

numbytes("hi") = 2

numbytes("€") = 3

principal()

根据收到请求的终端节点 (MQTT 或 HTTP) 类型,返回 X.509 证书的指纹或事物名称。SQL 版本 2015-10-8 及更高版本支持。

例如:

principal() = "ba67293af50bf2506f5f93469686da660c7c844e7b3950bfb16813e0d31e9373"

parse_time(String, Long, [String])

使用 parse_time 函数可将时间戳的格式设置为人类可读的日期/时间格式。SQL 版本 2016-03-23 及更高版本支持。parse_time 函数的参数如下:

pattern

(String) 符合 ISO 8601 标准格式的日期/时间模式。(具体而言,此函数支持 Joda-Time 格式。)

timestamp

(Long) 要采用自 Unix 纪元时间以来的毫秒数格式表示的时间。请参阅函数 timestamp()

timezone

(String) [Optional] 采用日期/时间格式的时区。默认值为“UTC”。此函数支持 Joda-Time 时区

示例:

在将此消息发布到主题“A/B”时,负载 {"ts": "1970.01.01 AD at 21:46:40 CST"} 将发送到 S3 存储桶:

{ "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME", "rule": { "awsIotSqlVersion": "2016-03-23", "sql": "SELECT parse_time("yyyy.MM.dd G 'at' HH:mm:ss z", 100000000, "America/Belize" ) as ts FROM 'A/B'", "ruleDisabled": false, "actions": [ { "s3": { "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME", "bucketName": "BUCKET_NAME", "key": "KEY_NAME" } } ], "ruleName": "RULE_NAME" } }

在将此消息发布到主题“A/B”时,与 {"ts": "2017.06.09 AD at 17:19:46 UTC"} 类似 (但具有当前日期/时间) 的负载将发送到 S3 存储桶:

{ "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME", "rule": { "awsIotSqlVersion": "2016-03-23", "sql": "SELECT parse_time("yyyy.MM.dd G 'at' HH:mm:ss z", timestamp() ) as ts FROM 'A/B'", "ruleDisabled": false, "actions": [ { "s3": { "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME", "bucketName": "BUCKET_NAME", "key": "KEY_NAME" } } ], "ruleName": "RULE_NAME" } }

parse_time() 也可用作替换模板。例如,在将此消息发布到主题“A/B”时,负载将发送到密钥为“2017”的 S3 存储桶:

{ "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME", "rule": { "awsIotSqlVersion": "2016-03-23", "sql": "SELECT * FROM 'A/B'", "ruleDisabled": false, "actions": [ { "s3": { "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME", "bucketName": BUCKET_NAME, "key": "${parse_time("yyyy", timestamp(), "UTC")}" } } ], "ruleName": "RULE_NAME" } }

power(Decimal, Decimal)

返回第一个参数的第二个参数次幂的值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。SQL 版本 2015-10-8 及更高版本支持。

示例:power(2, 5) = 32.0。

参数类型 1 参数类型 2 输出
Int/Decimal Int/Decimal Decimal (双精度),返回第一个参数的第二个参数次幂的值。
Int/Decimal/String Int/Decimal/String Decimal (双精度) 返回第一个参数的第二个参数次幂的值。所有字符串均转换为 Decimal。如果任何 String 转换为 Decimal 失败,则结果为 Undefined
其他值 其他值 Undefined

rand()

返回在 0.0 到 1.0 之间均匀分布的伪随机双精度值。SQL 版本 2015-10-8 及更高版本支持。

例如:

rand() = 0.8231909191640703

regexp_matches(String, String)

返回第一个参数是否包含第二个参数的匹配值 (正则表达式)。

例如:

Regexp_matches("aaaa", "a{2,}") = true.

Regexp_matches("aaaa", "b") = false.

第一个参数:

参数类型 结果
Int IntString 表示。
Decimal DecimalString 表示。
Boolean 布尔值 ("true" 或 "false") 的 String 表示。
String 这些区域有: String.
数组 Array (使用标准转换规则) 的 String 表示。
Object 对象 (使用标准转换规则) 的 String 表示。
Null Undefined
未定义 Undefined

第二个参数:

必须是有效的正则表达式。非字符串类型使用标准转换规则转换为 String。根据类型,生成的字符串不一定是正则表达式。如果 (转换后的) 参数不是有效的正则表达式,则结果为 Undefined

第三个参数:

必须是有效的正则表达式替代字符串。(可以引用捕获组。)非字符串类型将使用标准转换规则转换为 String。如果 (转换后的) 参数不是有效的正则表达式替代字符串,则结果为 Undefined

regexp_replace(String, String, String)

用第三个参数替换在第一个参数中出现的所有第二个参数 (正则表达式)。用“$”引用捕获组。SQL 版本 2015-10-8 及更高版本支持。

例如:

Regexp_replace("abcd", "bc", "x") = "axd"。

Regexp_replace("abcd", "b(.*)d", "$1") = "ac"。

第一个参数:

参数类型 结果
Int IntString 表示。
Decimal DecimalString 表示。
Boolean 布尔值 ("true" 或 "false") 的 String 表示。
String 源值。
数组 Array (使用标准转换规则) 的 String 表示。
Object 对象 (使用标准转换规则) 的 String 表示。
Null Undefined
未定义 Undefined

第二个参数:

必须是有效的正则表达式。非字符串类型使用标准转换规则转换为 String。根据类型,生成的字符串不一定是正则表达式。如果 (转换后的) 参数不是有效的正则表达式,则结果为 Undefined

第三个参数:

必须是有效的正则表达式替代字符串。(可以引用捕获组。)非字符串类型将使用标准转换规则转换为 String。如果 (转换后的) 参数不是有效的正则表达式替代字符串,则结果为 Undefined

regexp_substr(String, String)

在第一个参数中查找第二个参数 (正则表达式) 的第一个匹配。用“$”引用捕获组。SQL 版本 2015-10-8 及更高版本支持。

例如:

regexp_substr("hihihello", "hi") => "hi"

regexp_substr("hihihello", "(hi)*") => "hihi"

第一个参数:

参数类型 结果
Int IntString 表示。
Decimal DecimalString 表示。
Boolean 布尔值 ("true" 或 "false") 的 String 表示。
String String 参数。
数组 Array (使用标准转换规则) 的 String 表示。
Object 对象 (使用标准转换规则) 的 String 表示。
Null Undefined
未定义 Undefined

第二个参数:

必须是有效的正则表达式。非字符串类型使用标准转换规则转换为 String。根据类型,生成的字符串不一定是正则表达式。如果 (转换后的) 参数不是有效的正则表达式,则结果为 Undefined

第三个参数:

必须是有效的正则表达式替代字符串。(可以引用捕获组。)非字符串类型将使用标准转换规则转换为 String。如果参数不是有效的正则表达式替代字符串,则结果为 Undefined

rpad(String, Int)

返回字符串参数,在输入参数的右侧填充在第二个参数中指定的数量的空格。Int 参数必须介于 0 到 1000 之间。如果输入的值在这一有效范围之外,则参数将被设置为与其最近的值 (0 或 1000)。SQL 版本 2015-10-8 及更高版本支持。

示例:

rpad("hello", 2) = "hello "。

rpad(1, 3) = "1 ".

参数类型 1 参数类型 2 结果
String Int String 的右侧填充由 Int 指定数量的空格。
String Decimal Decimal 参数将向下舍入到最近的 Int,并且在字符串的右侧填充由 Int 指定数量的空格。
String String 第二个参数将转换为 Decimal,并向下舍入到最近的 Int。在 String 的右侧填充由 Int 值指定数量的空格。
其他值 Int/Decimal/String 第一个值将使用标准转换规则转换为 String,然后对该 String 应用 rpad 函数。如果它无法转换,则结果为 Undefined
任意值 其他值 Undefined

round(Decimal)

将给定的 Decimal 舍入到最近的 Int。如果 Decimal 与上下两个 Int 值距离相同 (例如 0.5),Decimal 将向上进位。SQL 版本 2015-10-8 及更高版本支持。

示例:Round(1.2) = 1。

Round(1.5) = 2.

Round(1.7) = 2.

Round(-1.1) = -1.

Round(-1.5) = -2.

参数类型 结果
Int 参数。
Decimal Decimal 会向下舍入至最近的 Int
String Decimal 会向下舍入至最近的 Int。如果字符串无法转换为 Decimal,则结果为 Undefined
其他值 Undefined

rtrim(String)

从输入的 String 中删除所有尾随空白 (制表符和空格)。SQL 版本 2015-10-8 及更高版本支持。

示例:

rtrim(" h i ") = " h i"

参数类型 结果
Int IntString 表示。
Decimal DecimalString 表示。
Boolean 布尔值 ("true" 或 "false") 的 String 表示。
数组 Array (使用标准转换规则) 的 String 表示。
Object 对象 (使用标准转换规则) 的 String 表示。
Null Undefined
未定义 Undefined

sign(Decimal)

返回给定数字的符号。当参数的符号为正时,将返回 1。当参数的符号为负时,将返回 -1。如果参数为 0,则返回 0。SQL 版本 2015-10-8 及更高版本支持。

示例:

sign(-7) = -1.

sign(0) = 0。

sign(13) = 1.

参数类型 结果
Int IntInt 值的符号。
Decimal IntDecimal 值的符号。
String IntDecimal 值的符号。字符串将转换为 Decimal 值,并返回 Decimal 值的符号。如果 String 无法转换为 Decimal,则结果为 Undefined。SQL 版本 2015-10-8 及更高版本支持。
其他值 Undefined

sin(Decimal)

以弧度形式返回数字的正弦值。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:sin(0) = 0.0

参数类型 结果
Int Decimal (双精度),参数的正弦值。
Decimal Decimal (双精度),参数的正弦值。
Boolean Undefined
String Decimal (双精度),参数的正弦值。如果字符串无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
Undefined Undefined

sinh(Decimal)

返回数字的双曲正弦。在代入函数之前,Decimal 值舍入到双精度。结果是双精度的 Decimal 值。SQL 版本 2015-10-8 及更高版本支持。

示例:sinh(2.3) = 4.936961805545957

参数类型 结果
Int Decimal (双精度),参数的双曲正弦值。
Decimal Decimal (双精度),参数的双曲正弦值。
Boolean Undefined
String Decimal (双精度),参数的双曲正弦值。如果字符串无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

substring(String, Int [, Int])

输入值为 String 后跟一个或两个 Int 值。对于 String 和单个 Int 参数,此函数在输入的 String 中从指定的 Int 索引 (从零开始,包括零) 到 String 结束提取子字符串并返回。对于 String 和两个 Int 参数,此函数在输入的 String 中从第一个 Int 索引参数 (从零开始,包括零) 到第二个 Int 索引参数 (从零开始,包括零) 提取子字符串并返回。索引小于零时将设置为零。大于 String 长度的索引将设置为 String 长度。在三个参数的版本中,如果第一个索引大于等于第二个索引,那么结果为空 String

如果提供的参数不是 (StringInt) 或 (StringIntInt),则将对参数应用标准转换以将其转换为正确的类型。如果无法转换类型,函数的结果为 Undefined。SQL 版本 2015-10-8 及更高版本支持。

示例:

substring("012345", 0) = "012345"。

substring("012345", 2) = "2345"。

substring("012345", 2.745) = "2345"。

substring(123, 2) = "3".

substring("012345", -1) = "012345"。

substring(true, 1.2) = "rue"。

substring(false, -2.411E247) = "false".

substring("012345", 1, 3) = "12".

substring("012345", -50, 50) = "012345"。

substring("012345", 3, 1) = ""。

sqrt(Decimal)

返回数字的平方根。在代入函数之前,Decimal 参数舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:sqrt(9) = 3.0。

参数类型 结果
Int 参数的平方根。
Decimal 参数的平方根。
Boolean Undefined
String 参数的平方根。如果字符串无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

startswith(String, String)

返回显示第一个字符串参数是否以第二个字符串参数开头的 Boolean。如果任一参数为 NullUndefined,则结果为 Undefined。SQL 版本 2015-10-8 及更高版本支持。

例如:

startswith("ranger","ran") = true

参数类型 1 参数类型 2 结果
String String 第一个字符串是否以第二个字符串开头。
其他值 其他值 两个参数都使用标准转换规则被转换为 String。返回第一个字符串是否以第二个字符串开头。如果任一参数为 NullUndefined,则结果为 Undefined

tan(Decimal)

以弧度形式返回数字的正切值。在代入函数之前,Decimal 值舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:tan(3) = -0.1425465430742778

参数类型 结果
Int Decimal (双精度),参数的正切值。
Decimal Decimal (双精度),参数的正切值。
Boolean Undefined
String Decimal (双精度),参数的正切值。如果字符串无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

tanh(Decimal)

以弧度形式返回数字的双曲正切值。在代入函数之前,Decimal 值舍入到双精度。SQL 版本 2015-10-8 及更高版本支持。

示例:tanh(2.3) = 0.9800963962661914

参数类型 结果
Int Decimal (双精度),参数的双曲正切值。
Decimal Decimal (双精度),参数的双曲正切值。
Boolean Undefined
String Decimal (双精度),参数的双曲正切值。如果字符串无法转换为 Decimal,则结果为 Undefined
数组 Undefined
Object Undefined
Null Undefined
未定义 Undefined

timestamp()

返回 AWS IoT 规则引擎观察到的当前时间戳,用距离 1970 年 1 月 1 日(星期四)协调世界时 (UTC) 00:00:00 的毫秒数来表示。SQL 版本 2015-10-8 及更高版本支持。

示例: timestamp() = 1481825251155

topic(Decimal)

返回已向其发送触发规则的消息的主题。如果未指定参数,则返回整个主题。Decimal 参数用于指定从 1 开始的特定主题段。对于主题 foo/bar/baz,主题(1) 将返回 foo,主题(2) 将返回 bar,以此类推。SQL 版本 2015-10-8 及更高版本支持。

示例:

topic() = "things/myThings/thingOne"

topic(1) = "things"

traceid()

返回 MQTT 消息的跟踪 ID (UUID),如果未通过 MQTT 发送消息,则返回 Undefined。SQL 版本 2015-10-8 及更高版本支持。

例如:

traceid() = "12345678-1234-1234-1234-123456789012"

trunc(Decimal, Int)

按照第二个参数指定的 Decimal 位数截断第一个参数。如果第二个参数小于零,则会设置为零。如果参数第二大于 34,则会设置为 34。将从结果中删除结尾的零。SQL 版本 2015-10-8 及更高版本支持。

示例:

trunc(2.3, 0) = 2.

trunc(2.3123, 2 = 2.31。

trunc(2.888, 2) = 2.88。

(2.00, 5) = 2.

参数类型 1 参数类型 2 结果
Int Int 源值。
Int/Decimal Int/Decimal 第一个参数被截断到由第二个参数所指定的长度。第二个参数如果不是 Int,将向下舍入至最近的 Int
Int/Decimal/String 第一个参数被截断到由第二个参数所指定的长度。第二个参数如果不是 Int,将向下舍入至最近的 IntString 将转换为 Decimal 值。如果字符串转换失败,则结果为 Undefined
其他值 Undefined

trim(String)

从输入的 String 中删除所有前导和尾随的空白。SQL 版本 2015-10-8 及更高版本支持。

例如:

Trim(" hi ") = "hi"

参数类型 结果
Int Int 在删除所有前导和尾随空白之后的 String 表示。
Decimal Decimal 在删除所有前导和尾随空白之后的 String 表示。
Boolean Boolean ("true" 或 "false") 在删除所有前导和尾随空白之后的 String 表示。
String 删除所有前导和尾随空白之后的 String
数组 Array 使用标准转换规则进行转换后的 String 表示。
Object 对象使用标准转换规则进行转换后的 String 表示。
Null Undefined
未定义 Undefined

upper(String)

返回给定 String 的大写版本。非 String 参数将使用标准转换规则转换为 String。SQL 版本 2015-10-8 及更高版本支持。

示例:

upper("hello") = "HELLO"

upper(["hello"]) = "[\"HELLO\"]"