Запросы AWS IoT Analytics для получения данных из набора данных с использованием boto3 - PullRequest
0 голосов
/ 29 октября 2018

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

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

Спасибо, Панкай

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

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

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

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 и существует множество связанных с этим вопросов, таких как этот , на которые есть хорошие ответы.

0 голосов
/ 29 октября 2018

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

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

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

...