Я работаю над проектом IoT. У меня есть Raspberry Pi, который отправляет данные в IoTHub в Azure. Этот концентратор перенаправляет эти данные в задание Azure Stream Analytics. В моем запросе я пытаюсь агрегировать (здесь среднее) все данные в TumblingWindow за 1 минуту, но в качестве метки времени я использую пользовательскую дату и время, отправленные в данных.
Я пробовал много вещей, но ничего не работало. похоже, что потоковое задание игнорирует дату и время, которые я предоставляю, и просто агрегирует все на основе времени прибытия. Только при использовании функции «Тест» путем загрузки файла json это работает.
SELECT
DateAdd(minute, -1, system.Timestamp) as TumblingWindowStartTime,
system.TimeStamp as TumblingWindowEndTime,
event.DeviceId as DeviceId,
AVG(event.Temperature) as TemperatureAverage,
Count(*) as MeasurementsCount
INTO
[input]
FROM
[output] as event
TIMESTAMP BY MeasuredOn
GROUP BY
event.DeviceId,
TumblingWindow(minute, 1)
Тип данных, которые я отправляю
[
{
"Temperature":13.426585352712585,
"DeviceId":"UlyssesPi",
"MeasuredOn":"2019-04-09T11:20:30.1027311Z"
},
{
"Temperature":16.81523611620778,
"DeviceId":"UlyssesPi",
"MeasuredOn":"2019-04-09T11:20:35.2281002Z"
},
...
]
Чего я ожидаю, так это того, что получаю при использовании функции «Тест» в Azure Stream Analytics:
TUMBLINGWINDOWSTARTTIME || TUMBLINGWINDOWENDTIME || DEVICEID || TEMPERATUREAVERAGE || MEASUREMENTSCOUNT
"2019-04-09T11:20:0... "2019-04-09T11:21:0... UlyssesPi 14.674093214798454 6
"2019-04-09T11:21:0... "2019-04-09T11:22:0... UlyssesPi 18.612186615873217 12
"2019-04-09T11:22:0... "2019-04-09T11:23:0... UlyssesPi 12.799415359568199 12
но вместо этого я получаю следующее:
TUMBLINGWINDOWSTARTTIME || TUMBLINGWINDOWENDTIME || DEVICEID || TEMPERATUREAVERAGE || MEASUREMENTSCOUNT
"2019-04-09 11:22:0... "2019-04-09 11:23:0... UlyssesPi 15,4994594331363 30
Так почему же результаты не совпадают? Это что-то я сделал не так? Что я могу сделать?
Спасибо за вашу помощь.
При тестировании логики Stream Analytics на портале политики упорядочения событий не применяются. Однако при выполнении задания в облаке применяются политики упорядочения событий. Вы должны убедиться, что метки времени в вашей полезной нагрузке точны (и событие не приходит очень поздно). Вы также можете настроить политики упорядочения событий, чтобы определить политики позднего прибытия (по умолчанию 5 секунд). Вы можете узнать, как использовать эти настройки здесь.
Это действительно политика заказа событий, спасибо за вашу помощь!