0

私はさまざまな種類の集計が必要な多くのセンサを備えたデバイスを持っています。私の質問は2つの部分に分かれています。このデバイスは、Azure IoTハブを介して通信し、Azure Stream AnalyticsはSQL DBおよびPower BIに接続します。ASAのセンサタイプ別に集計

1)データを送信する最も良い方法は何ですか? DeviceId、DateTime、SensorNumber、SensorValueの各センサー(sensor1、sensor2 ,.)とDateTimeまたは列の列?センサ名、トリガ値などの詳細情報は、参照テーブルを介して追加されます。これらのアプローチのメリットとデメリットは何ですか?

2)ASAで必要な集計の中にはMAXがあり、その他は参照テーブルを介してデバイスの各チャネルにリンクされているSensor Typeに応じて変化するAVERAGEです。たとえば、Sensorタイプ「Switch」はMAX集約を必要とし、センサタイプ「Temp」はAVERAGE集計を必要とします。 refテーブルを介してリンクされた別のSensorTypeフィールドに応じて、集約タイプを1つの入力(IoTHub)と1つの出力(SQL)に変更できますか?

ご協力いただければ幸いです。

答えて

0
  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) 
+0

ありがとうございました。私はそれが最も適切な設定だと思っていましたが、他の意見を求めていました。私は両方のアプローチが使用されていると聞いていますが、センサーの数が違うさまざまなデバイスがある場合は理にかなっています。参照テーブルの値で集計を変更する方法を教えてくれてありがとう。うまくいきます! – BrentA