Я работаю над проектом IoT. У меня есть Raspberry pi, который отправляет данные интеллектуального счетчика в концентратор событий IoT на Azure. Я читаю данные, используя Azure Stream Analytics Job. Показания счетчика отправляются каждые 10 секунд.
Один из созданных мной запросов вычисляет потребление электроэнергии за час с использованием переворачивающегося окна. Он рассчитывает максимальную читаемость метра из этого окна минус максимальная читаемость метра предыдущего окна, используя лаг. Я использую метку времени с устройства IOT вместо времени прибытия по умолчанию.
WITH onehourwindow AS
(
SELECT
max(total_low) * 1000 as max_low,
max(total_high) * 1000 as max_high,
max(gas) * 1000 as max_gas,
round(avg(current_consumption), 1) as avg_consumption,
max(timestamp) as max_timestamp
FROM
eventhuninputsmartmeter TIMESTAMP BY timestamp
GROUP BY TUMBLINGWINDOW(hour, 1)
)
SELECT
(max_low - LAG(max_low) OVER (LIMIT DURATION(hour, 1))) / 1000 as total_consumption_low,
(max_high - LAG(max_high) OVER (LIMIT DURATION(hour, 1))) / 1000 as total_consumption_high,
(max_gas - LAG(max_gas) OVER (LIMIT DURATION(hour, 1))) / 1000 as total_consumption_gas,
avg_consumption,
max_timestamp
INTO
MeterReadingSQLDB
FROM
onehourwindow
Запрос возвращает ожидаемые результаты в тесте. Вот пример отметки времени и потребления в результатах теста. Как и ожидалось, последняя отметка времени (max) - это последнее показание метра часа за 59 минут и около 50 секунд.
|----------------------------|---------------------------|
| max_timestamp | total_consumption_high |
|----------------------------|---------------------------|
|2020-02-28T22:59:52.1794730 | 1.171 |
|2020-02-28T21:59:51.6680430 | 0.500 |
|----------------------------|---------------------------|
Когда я запускаю задание запроса, я получаю следующие результаты, записанные в мой SQL БД. Теперь последняя временная метка (max) не является последним показанием счетчика часов (часов), а вместо этого составляет 54 минуты. Если я делаю расчет потребления вручную, я вижу, что используемое окно составляет один час, оно просто начинается не с 00, а с 55 минут каждый час.
|----------------------------|---------------------------|
| max_timestamp | total_consumption_high |
|----------------------------|---------------------------|
|2020-02-28T22:54:52.1300000 | 1.353 |
|2020-02-28T21:54:51.6830000 | 0.510 |
|----------------------------|---------------------------|
Как это решить? Я много чего перепробовал, но никак не могу это исправить. Ответ на пост, приведенный ниже, выглядел многообещающе, но мои события не приходят поздно, определенно не с опозданием на 6 минут. Таким образом, по-прежнему используются политики упорядочения событий по умолчанию.
Azure Потоковая аналитика «TimeStamp By» в запросе не работает на задании, но отлично работает на тесте
Любой мысли о том, чтобы исправить это так, чтобы я получил максимальную метку времени окна в 59 минут и 50 секунд или около того?
Спасибо!
Томас