我有一个IOT传感器,它向IoT MQTT核心主题发送以下消息:
{"ID1":10001,"ID2":1001,"ID3":101,"ValueMax":123}我添加了ACT/RULE,它将传入的消息存储在一个以时间戳作为密钥的S3桶中(每条消息都存储在桶中的一个单独的文件/行中)。
我以前只使用过SQL数据库,所以像这样存储它们对我来说是新的。
1)这是使用S3存储的正确方式吗?
2)如何将值可视化在模式中而不是单独的文件中?
3)我正在尝试从S3桶创建ML数据源,但是当Amazon尝试创建模式时,在下面得到错误:
"Amazon无法检索模式。如果您刚刚创建了这个数据源,请稍候再试。“
感谢所有的建议!
发布于 2018-10-03 22:36:39
1)这是使用S3存储的正确方式吗?
只有一个传感器时,使用时间戳(https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-function-timestamp函数在IoT规则中将是在S3中命名唯一对象的一种方法,但可能会出现一些问题。
由于您使用的是MQTT,所以如果出现这两个问题,可以使用traceId函数而不是时间戳。
2)如何将值可视化在模式中而不是单独的文件中? 3)我正在尝试从S3桶创建ML数据源,但是当Amazon尝试创建模式时,在下面得到错误:
对于第三个问题,我认为您可能在ML中遇到了数据格式问题,因为您的S3对象包含来自消息的JSON数据,而不是CSV。
对于第二个问题,我认为您正在尝试将来自连续消息的消息数据组合到CSV中,或者至少将消息数据作为CSV文件的一行输出。我认为这在物联网SQL语言中是不可能的,因为它的目的是生成JSON。
另一种方法是使用Lambda操作配置JSON规则,并使用lambda函数将IoT转换为CSV,然后将CSV写到S3桶中。如果您朝这个方向走,您可能必须使用时间戳(或traceId)来充实您的IoT消息数据,如您所称的lambda。
像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属性中的数据的源。
https://stackoverflow.com/questions/52625202
复制相似问题