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 数据)编码为字符串表示形式。