ASA 传感器类型的不同聚合

Different aggregation by Sensor Type for ASA

我的设备有很多传感器,需要不同类型的聚合,我的问题分为两个部分。该设备通过 Azure IoT 中心进行通信,然后转到 Azure 流分析到 SQL 数据库和 Power BI。

1) 传输数据的最佳方式是什么?每个传感器(sensor1、sensor2、.)和 DateTime 的列或 DeviceId、DateTime、SensorNumber 和 SensorValue 的列?通过引用 table 添加更多信息,例如传感器名称、触发值等。这些方法的优缺点是什么?

2) ASA 中需要的一些聚合是 MAX,其他聚合是 AVERAGE,这取决于通过参考 table 链接到设备每个通道的传感器类型。例如,传感器类型 "Switch" 需要 MAX 聚合,而传感器类型 "Temp" 需要 AVERAGE 聚合。您能否根据通过 ref table?

链接的不同 SensorType 字段,将聚合类型从一个输入 (IoTHub) 更改为一个输出 (SQL)

如有任何帮助,我们将不胜感激。

  1. 最好使用 SensorId、SensorValue,因为您可能不会始终拥有来自所有传感器的值。此外,当您拥有新的 sensorId 时,负载不会改变。
  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)