Запросы AWS IoT Analytics для получения данных из набора данных с использованием boto3

Можем ли мы использовать запрос при извлечении данных из набора данных в AWS IoT Analytics, мне нужны данные между 2 временными метками. Я использую Boto3 для получения данных. Я не видел никакой возможности использовать запрос в содержимом набора данных. Ниже приведен код boto3: response = client.get_dataset_content( datasetName='string', versionId='string' )

У кого-нибудь есть предложения, как использовать запрос или как восстановить данные между 2 отметками времени в AWS IoT Analytics?

Спасибо, Панкадж

2 ответа

Решение

Честно говоря, проще всего было бы сделать свою собственную фильтрацию времени (результат get_dataset_content это CSV-файл)

Вот что делает QuickSight, чтобы позволить вам перемещаться по набору данных во времени.

Если это невозможно, альтернативой является повторная обработка хранилища данных с обновленным конвейером, который отфильтровывает все, кроме интересующего вас временного диапазона (более подробная информация здесь). Вы должны заметить, что хотя соблазнительно использовать startTime а также endTime параметры для StartPipelineReprocessingэто только приблизительные значения до ближайшего часа.

Там может быть несколько способов сделать это в зависимости от вашего рабочего процесса, если у вас есть несколько дополнительных деталей, это было бы полезно.

Возможные подходы:

1) Создайте запланированный запрос для выполнения каждый час (например), где запрос выглядит примерно так;

SELECT * FROM my_datastore WHERE __dt >= current_date - interval '1' day
AND my_timestamp >= now() - interval '1' hour

Возможно, вам придется настроить формат временной метки в соответствии с тем, как вы ее храните (секунды эпох, миллисекунды эпох, ISO8601 и т. Д. Если вы установите этот параметр для запуска каждый час, каждый раз, когда он выполняется, вы получите последний час Обратите внимание, что ограничение __dt помогает вашему запросу выполняться быстрее (и дешевле), ограничивая сканирование только самым последним днем.

2) Вы можете улучшить вышесказанное, используя функцию окна дельты в наборе данных, которая позволяет получать данные, поступившие с момента последнего выполнения запроса, более легко. Затем вы можете упростить ваш запрос, чтобы он выглядел как;

select * from my_datastore where __dt >= current_date - interval '1' day

И настройте окно времени дельты, чтобы посмотреть на поле вашей отметки времени. Затем вы контролируете объем получаемых данных по частоте выполнения запроса (каждые 15 минут, каждый час и т. Д.).

3) Если у вас есть требование более общего назначения для выборки данных между 2 временными метками, которые вы вычисляете программно, и может не иметь форму сейчас () - некоторый интервал, способ, которым вы могли бы сделать это, - создать набор данных, а затем обновите набор данных с измененным выражением SQL, прежде чем запускать его с create-dataset-content. Таким образом, содержимое набора данных обновляется только теми результатами, которые вам нужны при каждом выполнении. Если это представляет интерес, я могу расширить фактический требуемый питон.

4) Как предположил Томас, часто бывает так же просто извлечь больший кусок данных с набором данных (например, за последний день), а затем отфильтровать до нужной временной отметки в коде. Это особенно легко, если вы используете, например, panda dataframes, и есть много связанных с этим вопросов, на которые есть хорошие ответы.

Другие вопросы по тегам