Azure Stream Analytics: удаляйте дубликаты во время агрегации - PullRequest
0 голосов
/ 15 декабря 2018

Я работаю над системой датчиков температуры и давления, где мои данные передаются через аналитическую работу Stream.Теперь могут быть отправлены повторяющиеся сообщения из-за того, что подтверждения не получены и по другим причинам.Таким образом, мои данные могут иметь формат: -

DeviceID    TimeStamp    MeasurementName     Value

1           1            temperature         50
1           1            temperature         50
1           2            temperature         60

Обратите внимание, что 2-я запись является дубликатом 1-й, поскольку DeviceId, Timestamp и MeasurementName совпадают.Я хочу взять в среднем за 5 минут падающее окно для этих данных в задании потоковой аналитики.Итак, у меня есть этот запрос

SELECT
    AVG(Value)
FROM
    SensorData
GROUP BY
    DeviceId,
    MeasurementName,
    TumblingWindow(minute, 5)

Ожидается, что этот запрос даст мне среднее измерение значений температуры и давления для каждого устройства за 5 минут.При выполнении этого среднего я должен устранить дубликаты.Фактическое среднее значение (50 + 60) / 2 = 55. Но среднее значение, учитывая мой этот запрос, будет (50 + 50 + 60) / 3 = 53,33

Как настроить этот запрос для правильного вывода?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Согласно Элементам языка запросов в ASA, кажется, что отдельные не поддерживаются ASA напрямую.Тем не менее, вы можете обнаружить, что его можно использовать с COUNT из здесь .

Так что, возможно, вы могли бы обратиться к моему ниже sql, чтобы получить среднее значение без повторяющихся данных.

with temp as
(
select count(distinct DeviceID) AS device,
count(distinct TimeStamp) AS time,
count(distinct MeasurementName) AS name,
Value as v
from jsoninput
group by Value,TumblingWindow(minute, 5)
)
select avg(v) from temp
group by TumblingWindow(minute, 5)

Вывод с вашими образцами данных:

enter image description here

...