1

我有一个 IOT 传感器,它向 IoT MQTT Core 主题发送以下消息:

{"ID1":10001,"ID2":1001,"ID3":101,"ValueMax":123}

我添加了 ACT/RULE,它将传入消息存储在 S3 存储桶中,时间戳作为键(每条消息都存储为存储桶中的单独文件/行)。

我以前只使用过 SQL 数据库,所以像这样存储它们对我来说是新的。

1) 这是使用 S3 存储的正确方法吗?

2)如何可视化模式中的值而不是单独的文件?

3) 我正在尝试从 S3 存储桶创建 ML 数据源,但是当 Amazon ML 尝试创建架构时出现以下错误:

“Amazon ML 无法检索架构。如果您刚刚创建了此数据源,请稍等片刻,然后重试。”

感谢所有的建议!

4

1 回答 1

0

1) 这是使用 S3 存储的正确方法吗?

只有一个传感器,在您的 IoT 规则中使用 [timestamp]( https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-function-timestamp函数将是一个在 S3 中命名唯一对象的方法,但可能会出现一些问题。

  1. 如果使用多个传感器,您可能会有多条消息以相同的时间戳到达,这不会在 S3 中生成唯一的对象名称。

  2. 几乎同一时间的时间戳将具有相似的前缀,并且以这种方式设计您的 S3 密钥可能无法在更高的消息速率下为您提供最佳性能。

由于您使用的是 MQTT,因此您可以使用traceId函数而不是时间戳来避免出现这两个问题。

2)如何可视化模式中的值而不是单独的文件?

3) 我正在尝试从 S3 存储桶创建 ML 数据源,但是当 Amazon ML 尝试创建架构时出现以下错误:

对于第三个问题,我认为您可能会在 ML 中遇到数据格式问题,因为您的 S3 对象包含消息中的 JSON 数据而不是 CSV。

对于第二个问题,我认为您正在尝试将来自连续消息的消息数据组合成 CSV,或者至少将消息数据输出为 CSV 文件的单行。我认为仅使用 Iot SQL 语言是不可能的,因为它旨在生成 JSON。

一种替代方法是使用 Lambda 操作配置您的 IoT SQL 规则并使用 lambda 函数进行 JSON 到 CSV 的转换,然后将 CSV 写入您的 S3 存储桶。如果您朝这个方向发展,您可能必须在调用 lambda 时使用时间戳(或 traceId)来丰富您的 IoT 消息数据。

类似的规则select timestamp() as timestamp, traceid() as traceid, concat(ID1, ID2, ID3, ValueMax) as values, * as message会产生类似的 JSON

{"timestamp":1538606018066,"traceid":"abab6381-c369-4a08-931d-c08267d12947","values":[10001,1001,101,123],"message":{"ID1":10001,"ID2":1001,"ID3":101,"ValueMax":123}}

这将很容易用作 CSV 行的源,其中包含来自其 values 属性的数据。

于 2018-10-03T22:36:39.900 回答