AWS S3 хранилище и схема
У меня есть датчик IOT, который отправляет следующее сообщение в тему IoT MQTT Core:
{"ID1":10001,"ID2":1001,"ID3":101,"ValueMax":123}
Я добавил ACT/RULE, который сохраняет входящее сообщение в S3 Bucket с отметкой времени в качестве ключа (каждое сообщение хранится в виде отдельного файла / строки в хранилище).
Раньше я работал только с базами данных SQL, поэтому их хранение таково для меня.
1) Это правильный способ работы с хранилищем S3?
2) Как я могу визуализировать значения в схеме вместо отдельных файлов?
3) Я пытаюсь создать ML Datasource из S3 Bucket, но при попытке создания схемы Amazon ML выдает следующую ошибку:
"Amazon ML не может получить схему. Если вы только что создали этот источник данных, подождите немного и попробуйте снова".
Цените все советы, которые есть!
1 ответ
1) Это правильный способ работы с хранилищем S3?
Используя только один датчик, использование [timestamp] ( https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html в вашем правиле IoT было бы способ назвать уникальные объекты в S3, но есть проблемы, которые могут возникнуть.
При наличии более одного датчика вы можете получить несколько сообщений с одной и той же отметкой времени, и это не приведет к созданию уникальных имен объектов в S3.
Временные метки примерно того же времени будут иметь одинаковые префиксы, и проектирование ключей S3 таким способом может не дать вам наилучшей производительности при более высоких скоростях сообщений.
Поскольку вы используете MQTT, вы можете использовать функцию traceId вместо метки времени, чтобы избежать этих двух проблем, если они возникнут.
2) Как я могу визуализировать значения в схеме вместо отдельных файлов?
3) Я пытаюсь создать ML Datasource из S3 Bucket, но при попытке создания схемы Amazon ML выдает следующую ошибку:
Что касается третьего вопроса, я думаю, что вы можете столкнуться с проблемой формата данных в ML, потому что ваши объекты S3 содержат данные JSON из ваших сообщений, а не CSV.
Что касается второго вопроса, я думаю, что вы пытаетесь объединить данные сообщения из последовательных сообщений в CSV или, по крайней мере, вывести данные сообщения в виде одной строки файла CSV. Я не думаю, что это возможно только с языком Iot SQL, поскольку он предназначен для создания JSON.
Один из вариантов - настроить правило IoT SQL с помощью действия Lambda и использовать лямбда-функцию для преобразования JSON в CSV, а затем записать CSV в корзину S3. Если вы пойдете в этом направлении, вам, возможно, придется дополнить данные сообщения IoT временной меткой (или traceId) при вызове лямбда-выражения.
Правило как 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.