0

У меня есть устройство со многими датчиками, которые нуждаются в разных типах агрегации, и мой вопрос состоит из двух частей. Устройство связывается через концентратор Azure IoT, который затем переходит в Azure Stream Analytics к SQL DB и Power BI.Различные агрегации по типу датчика для ASA

1) Каков наилучший способ передачи данных? Колонка для каждого датчика (датчик1, датчик2) и DateTime или столбцы для DeviceId, DateTime, SensorNumber и SensorValue? Дополнительная информация, такая как имя датчика, значение запуска и т. Д., Добавляется через справочную таблицу. Каковы преимущества или недостатки этих подходов?

2) Некоторые агрегирования, требуемые в ASA, являются MAX, а другие являются AVERAGE, которые изменяются в зависимости от типа датчика, который связан с каждым каналом устройства через справочную таблицу. Например, для типа датчика «Switch» требуется агрегация MAX, тогда как тип датчика «Temp» требует агрегации AVERAGE. Можете ли вы изменить тип агрегации с одного входа (IoTHub) и на один выход (SQL) в зависимости от другого поля SensorType, связанного через таблицу ref?

Любая помощь будет оценена по достоинству.

ответ

0
  1. Лучше использовать SensorId, SensorValue, потому что вы можете не иметь значений от всех датчиков все время. Кроме того, полезная нагрузка не изменяется, если у вас новый датчик.
  2. Это можно сделать со справочными данными. Однако, если это был просто другой агрегат, вы можете также вычислить как средние, так и максимальные все время и выбрать соответствующий на основе типа датчика на стороне SQL или стороне питания.

Если он более сложный, чем просто тип агрегата, справочные данные лучше. Вот как вы можете это сделать со справочными данными

create table iotInput 
(
    SensorId nvarchar(max), 
    SensorValue bigint, 
    Measurementtime datetime 
) 

create table refData 
(
    SensorId nvarchar(max), 
    IsMaxAggregate bigint 
) 

select 
    System.Timestamp [Aggregationtime], 
    iotInput.SensorId, 
    refData.IsMaxAggregate, 
    case when refData.IsMaxAggregate = 1 
     then max(iotInput.SensorValue) 
    else 
     avg(iotInput.SensorValue) end [Aggregate] 
from 
    iotInput timestamp by [MeasurementTime] 
join 
    refData 
on 
    iotInput.SensorId = refData.SensorId 
group by 
    iotInput.SensorId, 
    refData.IsMaxAggregate, 
    tumblingwindow(second,5) 
+0

Благодарим вас за это Vignesh. Я думал, что это будет наиболее подходящий вариант, но хотел бы получить от него другие мнения. Я слышал об использовании обоих подходов, но где у меня разные устройства с различным количеством датчиков, это имеет смысл. Благодарим вас за то, что вы указали, как изменить агрегацию по значению ссылочной таблицы. Работает хорошо! – BrentA

Смежные вопросы