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

SELECT 语句

AWS IoT SELECT 子句基本与 ANSI SQL SELECT 子句相同,仅存在一些细微区别。

您可以使用 SELECT 子句从传入 MQTT 消息中提取信息。SELECT * 可以用于检索整个传入消息负载。例如:

Incoming payload published on topic 'a/b': {"color":"red", "temperature":50} SQL statement: SELECT * FROM 'a/b' Outgoing payload: {"color":"red", "temperature":50}

如果负载是 JSON 对象,您可以参考对象中的键。您的传出负载将包含键值对。例如:

Incoming payload published on topic 'a/b': {"color":"red", "temperature":50} SQL statement: SELECT color FROM 'a/b' Outgoing payload: {"color":"red"}

您可以使用 AS 关键字重命名键。例如:

Incoming payload published on topic 'a/b':{"color":"red", "temperature":50} SQL:SELECT color AS my_color FROM 'a/b' Outgoing payload: {"my_color":"red"}

您可以通过用逗号分隔来选择多个项目。例如:

Incoming payload published on topic 'a/b': {"color":"red", "temperature":50} SQL: SELECT color as my_color, temperature as farenheit FROM 'a/b' Outgoing payload: {"my_color":"red","farenheit":50}

您可以通过在向传入负载添加项目时包括“*”来选择多个项目。例如:

Incoming payload published on topic 'a/b': {"color":"red", "temperature:50} SQL: SELECT *, 15 as speed FROM 'a/b' Outgoing payload: {"color":"red", "temperature:50, speed:15}"

您可以使用 "VALUE" 关键字来生成不属于 JSON 对象的传出负载。您只能选择一个项目。例如:

Incoming payload published on topic 'a/b': {"color":"red", "temperature":50} SQL: SELECT VALUE color FROM 'a/b' Outgoing payload: "red"

您可以使用 '.' 语法深入剖析传入负载中的嵌套 JSON 对象。例如:

Incoming payload published on topic 'a/b': {"color":{"red":255,"green":0,"blue":0}, "temperature":50} SQL: SELECT color.red as red_value FROM 'a/b' Outgoing payload: {"red_value":255}

您可以使用函数 (参阅 函数) 来转换传入负载。可使用圆括号进行分组。例如:

Incoming payload published on topic 'a/b': {"color":"red", "temperature":50} SQL: SELECT (temperature – 32) * 5 / 9 AS celsius, upper(color) as my_color FROM 'a/b' Outgoing payload: {"celsius":10,"my_color":"RED"}

使用二进制负载

当消息负载应作为原始二进制数据 (而不是 JSON 对象) 进行处理时,可以使用 * 运算符在 SELECT 子句中对其进行引用。

必须遵循以下规则使用 * 将消息负载作为原始二进制数据引用:

  1. SQL 语句和模板不得引用除 * 之外的 JSON 名称。

  2. SELECT 语句必须具有 * 作为唯一项目,或者必须只具有函数,例如:

    SELECT * FROM 'a/b'
    SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'a/b'

二进制负载示例

以下 SELECT 子句可与二进制负载配合使用,因为它未引用任何 JSON 名称。

SELECT * FROM 'a/b'

以下 SELECT 无法与二进制负载配合使用,因为它在 WHERE 子句中引用了 device_type

SELECT * FROM 'a/b' WHERE device_type = 'thermostat'

以下 SELECT 无法与二进制负载配合使用,因为它违反了第 2 条规则。

SELECT *, timestamp() AS timestamp FROM 'a/b'

以下 SELECT 可以与二进制负载配合使用,因为它并未违反任意一条规则。

SELECT * FROM 'a/b' WHERE timestamp() % 12 = 0

以下 AWS IoT 规则无法与二进制负载配合使用,因为它违反了第 1 条规则。

{ "sql": "SELECT * FROM 'a/b'" "actions": [{ "republish": { "topic":"device/${device_id}" } }] }

本页内容: