使用二进制负载 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用二进制负载

当消息负载应作为原始二进制数据而不是 JSON 对象进行处理时,可以使用 * 运算符在 SELECT 子句中对其进行引用。这适用于具有某些规则操作(如 S3 操作)的非 JSON 负载。

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

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

  2. SELECT 语句必须具有 * 作为唯一项目,或者必须只具有函数。请参阅以下 示例。

    SELECT * FROM 'topic/subtopic'
    SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'

对于不支持二进制负载输入的规则操作(例如,Lambda 操作),您必须解码二进制负载。如果 Lambda 规则操作是 base64 编码并在 JSON 负载中,则可以接收二进制数据。为此,您可以将规则更改为:

SELECT encode(*, 'base64') AS data FROM 'my_topic'

二进制负载示例

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

SELECT * FROM 'topic/subtopic'

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

SELECT * FROM 'topic/subtopic' WHERE device_type = 'thermostat'

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

SELECT *, timestamp() AS timestamp FROM 'topic/subtopic'

您可以将以下 SELECT 与二进制负载配合使用,因为它符合第 1 条规则或第 2 条规则。

SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0

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

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