У меня серьезные проблемы с работой окна 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)