1) Это правильный способ работы с хранилищем S3?
Только с одним датчиком, используя функцию [timestamp] (https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-function-timestamp в вашем правиле IoT)было бы способом назвать уникальные объекты в S3, но есть проблемы, которые могут возникнуть.
Если у вас более одного датчика, вы можете получить несколько сообщений с одной и той же отметкой времени, и этоне будет генерировать уникальные имена объектов в S3.
Временные метки почти в одно и то же время будут иметь аналогичные префиксы, и проектирование ключей S3 таким способом может не дать вам наилучшей производительности при более высоком сообщенииrate.
Поскольку вы используете MQTT, вы можете использовать функцию traceId вместо отметки времени, чтобы избежать этих двух проблем, если они возникнут.
2) Как я могу визуализировать значения в схеме вместо отдельных файлов?
3) Я пытаюсь создать источник данных ML из корзины S3, но при Amazon Amazon ML появляется ошибка ниже.пытается создать сchema:
По третьему вопросу, я думаю, вы можете столкнуться с проблемой формата данных в ML, поскольку ваши объекты S3 содержат данные JSON из ваших сообщений, а не CSV.
По второму вопросу, я думаю, вы пытаетесь объединить данные сообщения из последовательных сообщений в CSV или, по крайней мере, вывести данные сообщения в виде одной строки файла CSV.Я не думаю, что это возможно только с языком Iot SQL, так как он предназначен для создания JSON.
Одна альтернатива - настроить правило SQL IoT с действием Lambda и использовать функцию лямбда, чтобы заставить ваш JSONПреобразование CSV, а затем записать CSV в ваше ведро S3.Если вы пойдете в этом направлении, вам, возможно, придется дополнить данные сообщения IoT временной меткой (или traceId) при вызове лямбды.
Правило, подобное select timestamp() as timestamp, traceid() as traceid, concat(ID1, ID2, ID3, ValueMax) as values, * as message
, будет генерировать JSON, как
* 1039.*
{"timestamp":1538606018066,"traceid":"abab6381-c369-4a08-931d-c08267d12947","values":[10001,1001,101,123],"message":{"ID1":10001,"ID2":1001,"ID3":101,"ValueMax":123}}
Это было бы просто использовать в качестве источника для строки CSV с данными из свойства values.