使用二进制负载
当消息负载应作为原始二进制数据而不是 JSON 对象进行处理时,可以使用 * 运算符在 SELECT
子句中对其进行引用。这适用于具有某些规则操作(如 S3 操作)的非 JSON 负载。
二进制负载示例
当您使用 * 将消息负载作为原始二进制数据进行引用时,您可以向规则添加数据。如果您有空的或 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'