使用二进制负载
如果您发送原始二进制负载,Amazon IoT Core 通过 S3 操作将其向下游路由到 Amazon S3 存储桶。然后,原始二进制负载编码为 base64 并附加到 JSON。当将消息负载作为原始二进制数据(而不是 JSON 对象)进行处理时,可以使用 * 运算符在 SELECT 子句中对其进行引用。
二进制负载示例
当您使用 * 将消息负载作为原始二进制数据进行引用时,您可以向规则添加数据。如果您有空的或 JSON 有效负载,生成的有效负载可以使用规则添加数据。下面显示了支持 SELECT 子句的示例。
-
对于二进制有效负载,您可以将以下
SELECT子句仅与 * 一起使用。SELECT * FROM 'topic/subtopic'SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0
-
您还可以添加数据并使用以下
SELECT子句。SELECT *, principal() as principal, timestamp() as time FROM 'topic/subtopic'SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'
-
您还可以使用带二进制负载的
SELECT子句。以下是指在 WHERE 子句中的
device_type。SELECT * FROM 'topic/subtopic' WHERE device_type = 'thermostat'还支持以下内容。
{ "sql": "SELECT * FROM 'topic/subtopic'" "actions": [{ "republish": { "topic":"device/${device_id}" } }] }
以下规则操作不支持二进制负载,因此您必须对它们进行解码。
-
一些规则操作不支持二进制负载输入(例如,Lambda 操作),您必须解码二进制负载。如果 Lambda 规则操作是 base64 编码并在 JSON 负载中,则可以接收二进制数据。为此,您可以将规则更改如下:
SELECT encode(*, 'base64') AS data FROM 'my_topic' -
SQL 语句不支持字符串作为输入。要将字符串输入转换为 JSON,您可以运行以下命令。
SELECT decode(encode(*, 'base64'), 'base64') AS payload FROM 'topic'