AWS IoT Analytics Delta Window - PullRequest
       29

AWS IoT Analytics Delta Window

0 голосов
/ 15 мая 2019

У меня серьезные проблемы с работой окна Delta Window Аналитики IoT AWS ( docs ).

Я пытаюсь настроить его так, чтобы каждый день выполнялся запрос, чтобы получить только последние 1 час данных. Согласно документам, функция schedule может использоваться для запуска запроса с использованием выражения cron (в моем случае каждый час), а delta window должен ограничивать мой запрос, чтобы включать только записи, которые находятся в указанном временном окне (в моем дело последнего часа).

SQL-запрос, который я выполняю, просто SELECT * FROM dev_iot_analytics_datastore, и если я не включаю дельта-окно, я получаю записи, как и ожидалось. К сожалению, когда я включаю дельта-выражение, я ничего не получаю (никогда). Я оставил данные накапливаться около 10 дней, поэтому в базе данных есть пара миллионов записей. Учитывая, что я не был уверен, какой будет оптимальный формат, я включил в записи следующие временные поля:

datetime  :  2019-05-15T01:29:26.509
(A string formatted using ISO Local Date Time)

timestamp_sec  :  1557883766
(A unix epoch expressed in seconds)

timestamp_milli  :  1557883766509
(A unix epoch expressed in milliseconds)

Существует также автоматически добавленное AWS значение, называемое __dt, которое использует тот же формат, что и мой datetime, за исключением того, что оно представляется точным с точностью до 1 дня. все значения, введенные в данный день, имеют одинаковое значение (например, 2019-05-15 00:00:00.00)

Я пробовал ряд выражений (включая предлагаемое выражение AWS) из стандартного SQL и Presto, так как не уверен, какое из них используется для этого запроса. Я знаю, что они используют подмножество Presto для аналитики, поэтому имеет смысл использовать его для дельты, но в документах просто говорится « ... любое допустимое выражение SQL ».

Выражения, которые я пробовал до сих пор без удачи:


from_unixtime(timestamp_sec)
from_unixtime(timestamp_milli)
cast(from_unixtime(unixtime_sec) as date)
cast(from_unixtime(unixtime_milli) as date)
date_format(from_unixtime(timestamp_sec), '%Y-%m-%dT%h:%i:%s')
date_format(from_unixtime(timestamp_milli), '%Y-%m-%dT%h:%i:%s')
from_iso8601_timestamp(datetime)

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

Пожалуйста, попробуйте следующее:

  1. Установите запрос на SELECT * FROM dev_iot_analytics_datastore
  2. Фильтр выбора данных:
    • Окно выбора данных: Delta time
    • Смещение: -1 часов
    • Выражение метки времени: from_unixtime(timestamp_sec)
  3. Подождите, пока содержимое набора данных будет работать некоторое время, скажем, 15 минут или более.
  4. Проверить содержимое
0 голосов
/ 22 июня 2019

После нескольких недель тестирования и опробования всех предложений в этом посте, а также многих других, кажется, что чрезвычайно технический ответ заключался в том, чтобы «выключить и снова включить».Я удалил весь стек аналитики и перестроил все под разными именами, и теперь кажется, что он работает!

Важно, что хотя я пометил это как правильный ответ из-за фактического разрешения.Оба ответа, предоставленные @ Populus и @ Roger , верны, если мое развертывание функционирует должным образом.

0 голосов
/ 31 мая 2019

Какие параметры смещения и выражения времени вы используете?

Поскольку дельта-окна являются эффективными фильтрами, вставляемыми в ваш SQL, вы можете устранить их, вручную вставив выражение фильтра в запрос набора данных.

А именно, применение фильтра дельта-окна с -3-минутным (отрицательным) смещением и выражением времени from_unixtime (my_timestamp) к запросу «SELECT my_field FROM my_datastore» переводит в эквивалентный запрос:

SELECT my_field FROM
    (SELECT * FROM "my_datastore" WHERE
        (__dt between date_trunc('day', iota_latest_succeeded_schedule_time() - interval '1' day)
                  and date_trunc('day', iota_current_schedule_time() + interval '1' day)) AND
        iota_latest_succeeded_schedule_time() - interval '3' minute < from_unixtime(my_timestamp) AND
        from_unixtime(my_timestamp) <= iota_current_schedule_time() - interval '3' minute)

Попробуйте использовать подобный запрос (без дельта-фильтра времени) с правильными значениями для смещения и выражения времени и посмотрите, что вы получите. (_Dt между ...) - это просто оптимизация для ограничения сканируемых разделов.Вы можете удалить его для устранения неполадок.

...