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

SQL 版本

AWS IoT 规则引擎使用一种类似 SQL 的语法从 MQTT 消息选择数据。SQL 语句基于 SQL 版本进行解释,该版本由描述此规则的 JSON 文档中的 awsIotSqlVersion 属性指定。有关 JSON 规则文档结构的更多信息,请参阅创建规则。借助 awsIotSqlVersion 属性,您可以指定想要使用的 AWS IoT SQL 规则引擎版本。当部署新版本时,您可继续使用较旧的版本或更改规则以使用新版本。您当前的规则将继续使用创建时所用的版本。

以下 JSON 示例介绍了如何使用 awsIotSqlVersion 属性指定 SQL 版本:

{ "sql": "expression", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [{ "republish": { "topic": "my-mqtt-topic", "roleArn": "arn:aws:iam::123456789012:role/my-iot-role" } }] }

当前支持的版本包括:

  • 2015-10-08,2015 年 10 月 8 日构建的 SQL 原始版本。

  • 2016-03-23,2016 年 3 月 23 日构建的 SQL 版本。

  • beta,最新的 SQL 测试版本。使用此版本可能会给您的规则带来破坏性更改。

2016-03-23 SQL 规则引擎版本中的新增功能

  • 针对选择嵌套 JSON 对象的修复程序。

  • 针对阵列查询的修复程序。

  • 对象间查询支持。

  • 支持将阵列作为顶级对象输出。

  • 添加 encode(value, encodingScheme) 函数,该函数可应用于 JSON 和非 JSON 格式数据。

对象间查询

此功能允许您查询 JSON 对象中的属性。例如,给定了以下 MQTT 消息:

{ "e": [ { "n": "temperature", "u": "Cel", "t": 1234, "v":22.5 }, { "n": "light", "u": "lm", "t": 1235, "v":135 }, { "n": "acidity", "u": "pH", "t": 1235, "v":7 } ] }

以及以下规则:

SELECT (SELECT v FROM e WHERE n = 'temperature') as temperature FROM 'my/topic'

该规则生成以下输出:

{"temperature": [{"v":22.5}]}

使用相同的 MQTT 消息,并给定一个略复杂的规则,如:

SELECT get((SELECT v FROM e WHERE n = 'temperature'),1).v as temperature FROM 'topic'

该规则生成以下输出:

{"temperature":22.5}

Array 作为顶级对象输出

此功能允许规则将阵列作为顶级对象返回。例如,给定了以下 MQTT 消息:

{ "a": {"b":"c"}, "arr":[1,2,3,4] }

以及以下规则:

SELECT VALUE arr FROM 'topic'

该规则生成以下输出:

[1,2,3,4]

对函数进行编码

根据指定的编码方案,将负载(可能是非 JSON 数据)编码为字符串表示形式。