Agregasi berbeda berdasarkan Jenis Sensor untuk ASA

Saya memiliki perangkat dengan banyak sensor yang memerlukan jenis agregasi berbeda dan pertanyaan saya ada dalam dua bagian. Perangkat berkomunikasi melalui Azure IoT Hub yang kemudian masuk ke Azure Stream Analytics ke SQL DB dan Power BI.

1) Apa cara terbaik untuk mengirimkan data? Kolom untuk setiap sensor (sensor1, sensor2,.) dan DateTime atau Kolom untuk DeviceId, DateTime, SensorNumber, dan SensorValue? Informasi lebih lanjut seperti Nama Sensor, nilai pemicu, dll. ditambahkan melalui tabel referensi. Apa kelebihan atau kekurangan pendekatan-pendekatan ini?

2) Beberapa agregasi yang diperlukan dalam ASA adalah MAX dan lainnya adalah AVERAGE yang berubah tergantung pada Jenis Sensor yang dihubungkan ke setiap saluran perangkat melalui tabel referensi. Misalnya tipe sensor "Switch" memerlukan agregasi MAX sedangkan tipe sensor "Temp" memerlukan agregasi RATA-RATA. Bisakah Anda mengubah jenis agregasi dari satu masukan (IOTHub) dan ke satu keluaran (SQL) bergantung pada bidang SensorType berbeda yang ditautkan melalui tabel referensi?

Bantuan apa pun akan dihargai.


person BrentA    schedule 18.06.2016    source sumber


Jawaban (1)


  1. Lebih baik menggunakan SensorId, SensorValue karena Anda mungkin tidak selalu mendapatkan nilai dari semua sensor. Selain itu, muatannya tidak berubah ketika Anda memiliki sensorId baru.
  2. Dimungkinkan untuk melakukannya dengan data referensi. Namun, jika itu hanya agregat yang berbeda, Anda juga dapat menghitung rata-rata dan maks sepanjang waktu dan memilih yang sesuai berdasarkan jenis sensor di sisi SQL atau sisi power bi.

Jika lebih kompleks dari sekedar jenis agregat, data referensi lebih baik. Inilah cara Anda melakukannya dengan data referensi

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)
person Vignesh Chandramohan    schedule 18.06.2016
comment
Terima kasih untuk Vignesh itu. Saya pikir itu akan menjadi pengaturan yang paling tepat tetapi menginginkan pendapat lain mengenai hal itu. Saya telah mendengar kedua pendekatan digunakan tetapi jika saya memiliki perangkat berbeda dengan jumlah sensor berbeda, hal itu masuk akal. Terima kasih juga telah memberi tahu saya cara mengubah agregasi berdasarkan nilai tabel referensi. Bekerja dengan baik! - person BrentA; 19.06.2016