Membangun solusi IoT dengan menggunakan Stream Analytics

Pengantar

Dalam solusi ini, Anda mempelajari cara menggunakan Azure Stream Analytics untuk mendapatkan wawasan real time dari data Anda. Pengembang dapat dengan mudah menggabungkan aliran, seperti aliran klik, log, dan peristiwa yang dihasilkan perangkat, dengan catatan riwayat atau data referensi untuk memperoleh wawasan bisnis. Sebagai layanan komputasi aliran real time terkelola sepenuhnya yang di-hosting di Microsoft Azure, Azure Stream Analytics menyediakan ketahanan bawaan, latensi rendah, dan skalabilitas untuk membuat Anda siap dan berjalan dalam hitungan menit.

Setelah menyelesaikan solusi ini, Anda dapat:

  • Membiasakan diri dengan portal Azure Stream Analytics.
  • Mengonfigurasi dan menyebarkan pekerjaan streaming.
  • Mengartikulasikan masalah dunia nyata dan menyelesaikannya dengan menggunakan bahasa kueri Azure Stream Analytics.
  • Mengembangkan solusi streaming untuk pelanggan Anda dengan menggunakan Azure Stream Analytics dengan yakin.
  • Menggunakan pengalaman pemantauan dan pengelogan untuk memecahkan masalah.

Prasyarat

Anda memerlukan prasyarat berikut untuk menyelesaikan solusi ini:

Pengantar skenario: "Halo, Tol!"

Stasiun tol adalah fenomena yang umum. Anda dapat menemukannya di banyak jalan tol, jembatan, dan terowongan di seluruh dunia. Setiap stasiun tol memiliki beberapa pintu tol. Di pintu manual, Anda berhenti untuk membayar tol ke petugas. Di pintu otomatis, sensor di atas setiap pintu tol memindai kartu RFID yang ditempelkan di kaca depan kendaraan Anda saat melewati pintu tol. Sangat mudah untuk memvisualisasikan bagian kendaraan melalui stasiun tol ini sebagai aliran peristiwa di mana operasi menarik dapat dilakukan.

Gambar mobil di pintu tol

Data masuk

Solusi ini berfungsi dengan dua aliran data. Sensor yang dipasang di pintu masuk dan keluar stasiun tol menghasilkan aliran pertama. Aliran kedua adalah himpunan data pencarian statik yang memiliki data pendaftaran kendaraan.

Aliran entri

Aliran entri memuat informasi tentang mobil saat memasuki stasiun tol. Peristiwa data keluar di-streaming langsung ke hub peristiwa dari Aplikasi Web yang disertakan dalam aplikasi sampel.

| TollID | EntryTime | LicensePlate | State | Make | Model | VehicleType | VehicleWeight | Toll | Tag |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 |2014-09-10 12:01:00.000 |JNB 7001 |NY |Honda |CRV |1 |0 |7 | |
| 1 |2014-09-10 12:02:00.000 |YXZ 1001 |NY |Toyota |Camry |1 |0 |4 |123456789 |
| 3 |2014-09-10 12:02:00.000 |ABC 1004 |CT |Ford |Taurus |1 |0 |5 |456789123 |
| 2 |2014-09-10 12:03:00.000 |XYZ 1003 |CT |Toyota |Corolla |1 |0 |4 | |
| 1 |2014-09-10 12:03:00.000 |BNJ 1007 |NY |Honda |CRV |1 |0 |5 |789123456 |
| 2 |2014-09-10 12:05:00.000 |CDE 1007 |NJ |Toyota |4x4 |1 |0 |6 |321987654 |

Berikut adalah deskripsi singkat kolom:

Kolom Deskripsi
TollID ID pintu tol yang mengidentifikasi pintu tol secara unik
EntryTime Tanggal dan waktu masuknya kendaraan di pintu tol dalam UTC
LicensePlate Plat nomor kendaraan
Provinsi Sebuah negara bagian di Amerika Serikat
Pastikan Produsen mobil
Model Nomor model mobil
VehicleType 1 untuk kendaraan penumpang atau 2 untuk kendaraan komersial
WeightType Berat kendaraan dalam ton; 0 untuk kendaraan penumpang
Tol Nilai tol dalam USD
Tag E-Tag pada mobil yang mengotomatiskan pembayaran; kosong ketika pembayaran dilakukan secara manual

Aliran keluar

Aliran keluar berisi informasi tentang mobil yang meninggalkan stasiun tol. Peristiwa data keluar di-streaming langsung ke hub peristiwa dari Aplikasi Web yang disertakan dalam aplikasi sampel.

TollId ExitTime LicensePlate
1 2014-09-10T12:03:00Z JNB 7001
1 2014-09-10T12:03:00Z YXZ 1001
3 2014-09-10T12:04:00Z ABC 1004
2 2014-09-10T12:07:00Z XYZ 1003
1 2014-09-10T12:08:00Z BNJ 1007
2 2014-09-10T12:07:00Z CDE 1007

Berikut adalah deskripsi singkat kolom:

Kolom Deskripsi
TollID ID pintu tol yang mengidentifikasi pintu tol secara unik
ExitTime Tanggal dan waktu keluarnya kendaraan dari pintu tol dalam UTC
LicensePlate Plat nomor kendaraan

Data pendaftaran kendaraan komersial

Solusinya menggunakan rekam jepret statik dari database pendaftaran kendaraan komersial. Data ini disimpan sebagai file JSON ke penyimpanan blob Azure, termasuk dalam sampel.

LicensePlate RegistrationId Kedaluwarsa
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
RIV 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

Berikut adalah deskripsi singkat kolom:

Kolom Deskripsi
LicensePlate Plat nomor kendaraan
RegistrationId ID pendaftaran kendaraan
Kedaluwarsa Status pendaftaran kendaraan: 0 jika pendaftaran kendaraan aktif, 1 jika pendaftaran kedaluwarsa

Menyiapkan lingkungan untuk Azure Stream Analytics

Untuk menyelesaikan solusi ini, Anda memerlukan langganan Microsoft Azure. Jika Anda tidak memiliki akun Azure, Anda dapat meminta versi uji coba gratis.

Pastikan untuk mengikuti langkah-langkah di bagian "Bersihkan akun Azure Anda" di akhir artikel ini agar dapat memanfaatkan kredit Azure dengan sebaik-baiknya.

Menyebarkan sampel

Ada beberapa sumber daya yang dapat digunakan dengan mudah di grup sumber daya, dengan beberapa klik. Definisi solusi di-hosting di repositori GitHub di https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

Menyebarkan templat TollApp di portal Azure

  1. Untuk menggunakan lingkungan TollApp ke Azure, gunakan tautan ini untuk Menyebarkan Templat TollApp Azure.

  2. Masuk ke portal Azure, jika diminta.

  3. Pilih langganan tempat berbagai sumber daya ditagih.

  4. Tentukan grup sumber daya baru, dengan nama unik, misalnya MyTollBooth.

  5. Pilih lokasi Azure.

  6. Tentukan Interval sebagai jumlah detik. Nilai ini digunakan dalam contoh aplikasi web, untuk seberapa sering mengirim data ke pusat aktivitas.

  7. Centang untuk menyetujui syarat dan ketentuan.

  8. Pilih Sematkan ke dasbor agar Anda dapat dengan mudah menemukan sumber daya nantinya.

  9. Pilih Beli untuk menyebarkan templat sampel.

  10. Setelah beberapa saat, pemberitahuan muncul untuk mengonfirmasi Penyebaran berhasil.

Meninjau sumber daya TollApp Azure Stream Analytics

  1. Masuk ke portal Azure.

  2. Temukan Grup Sumber Daya yang Anda beri nama di bagian sebelumnya.

  3. Verifikasi bahwa sumber daya berikut ini tercantum dalam grup sumber daya:

    • Satu Akun Azure Cosmos DB
    • Satu Pekerjaan Azure Stream Analytics
    • Satu Akun Azure Storage
    • Satu hub peristiwa Azure
    • Dua Web Apps

Periksa pekerjaan TollApp sampel

  1. Mulai dari grup sumber daya di bagian sebelumnya, pilih pekerjaan streaming Stream Analytics yang dimulai dengan nama tollapp (nama berisi karakter acak untuk keunikan).

  2. Pada halaman Gambaran Umum pekerjaan, perhatikan kotak Kueri untuk menampilkan sintaks kueri.

    SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*) AS Count
    INTO CosmosDB
    FROM EntryStream TIMESTAMP BY EntryTime
    GROUP BY TUMBLINGWINDOW(minute, 3), TollId
    

    Untuk memparafrasekan maksud kueri, misalnya Anda perlu menghitung jumlah kendaraan yang masuk ke pintu tol. Karena pintu tol jalan raya memiliki aliran kendaraan yang masuk secara terus menerus, maka kejadian masuk tersebut dianalogikan sebagai aliran yang tidak pernah berhenti. Untuk mengukur aliran, Anda harus menentukan "periode waktu" untuk diukur. Mari kita perbaiki pertanyaan lebih lanjut, menjadi "Berapa banyak kendaraan yang masuk ke pintu tol setiap tiga menit?" Ini biasanya disebut sebagai hitungan jatuh.

    Seperti yang Anda lihat, Azure Stream Analytics menggunakan bahasa kueri yang seperti SQL dan menambahkan beberapa ekstensi untuk menentukan aspek kueri terkait waktu. Untuk detail selengkapnya, baca tentang konstruksi Manajemen Waktu dan Windowing yang digunakan dalam kueri.

  3. Periksa Input pekerjaan sampel TollApp. Hanya input EntryStream yang digunakan dalam kueri saat ini.

    • Input EntryStream adalah koneksi hub peristiwa yang mengantre data yang mewakili setiap kali mobil memasuki tollbooth di jalan raya. Aplikasi web yang merupakan bagian dari sampel membuat peristiwa, dan data tersebut diantrekan di pusat aktivitas ini. Perhatikan bahwa input ini dikueri dalam klausul FROM dari kueri streaming.
    • Input ExitStream adalah koneksi hub peristiwa yang mengantre data yang mewakili setiap kali mobil keluar dari tollbooth di jalan raya. Input streaming ini digunakan dalam variasi sintaks kueri selanjutnya.
    • Input Pendaftaran adalah koneksi penyimpanan Azure Blob, yang mengarah ke file Registration.json statik, yang digunakan untuk pencarian sesuai kebutuhan. Input data referensi ini digunakan dalam variasi sintaks kueri selanjutnya.
  4. Periksa Output dari pekerjaan sampel TollApp.

    • Output Azure Cosmos DB adalah kontainer database Azure Cosmos DB yang menerima peristiwa sink output. Perhatikan bahwa output ini digunakan dalam klausul INTO dari kueri streaming.

Memulai pekerjaan streaming TollApp

Ikuti langkah-langkah berikut untuk memulai pekerjaan streaming:

  1. Pada halaman Gambaran Umum pekerjaan, pilih Mulai.

  2. Pada panel Mulai pekerjaan, pilih Sekarang.

  3. Setelah beberapa saat, setelah pekerjaan berjalan, pada halaman Gambaran Umum pekerjaan streaming, lihat grafik Pemantauan. Grafik akan menampilkan beberapa ribu peristiwa input, dan puluhan peristiwa output.

Meninjau data output Azure Cosmos DB

  1. Temukan grup sumber daya yang memuat sumber daya TollApp.

  2. Pilih Akun Azure Cosmos DB dengan pola nama tollapp<random>-cosmos.

  3. Pilih judul Data Explorer untuk membuka halaman Data Explorer.

  4. Luaskan tollAppDatabase>tollAppCollection>Dokumen.

  5. Dalam daftar ID, beberapa dokumen ditampilkan setelah output tersedia.

  6. Pilih setiap ID untuk meninjau dokumen JSON. Perhatikan setiap tollid, windowend time, dan dari jendela tersebut count of cars .

  7. Setelah tambahan tiga menit, set lain dari empat dokumen tersedia, satu dokumen per tollid.

Melaporkan total waktu untuk setiap mobil

Waktu rata-rata yang diperlukan sebuah mobil untuk melewati tol membantu menilai efisiensi proses dan pengalaman pelanggan.

Untuk menemukan total waktu, gabungkan aliran EntryTime dengan aliran ExitTime. Gabungkan kedua aliran input pada kolom TollId dan LicencePlate yang sama. Operator JOIN mengharuskan Anda menentukan kelonggaran sementara yang menjelaskan perbedaan waktu yang dapat diterima antara peristiwa yang digabungkan. Gunakan fungsi DATEDIFF untuk menentukan bahwa peristiwa tidak boleh lebih dari 15 menit satu sama lain. Terapkan juga fungsi DATEDIFF untuk waktu keluar dan masuk guna menghitung waktu aktual yang dihabiskan mobil di stasiun tol. Perhatikan perbedaan penggunaan DATEDIFF saat digunakan dalam pernyataan SELECT, bukan kondisi JOIN.

SELECT EntryStream.TollId, EntryStream.EntryTime, ExitStream.ExitTime, EntryStream.LicensePlate, DATEDIFF (minute, EntryStream.EntryTime, ExitStream.ExitTime) AS DurationInMinutes
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN ExitStream TIMESTAMP BY ExitTime
ON (EntryStream.TollId= ExitStream.TollId AND EntryStream.LicensePlate = ExitStream.LicensePlate)
AND DATEDIFF (minute, EntryStream, ExitStream ) BETWEEN 0 AND 15

Untuk memperbarui sintaks kueri pekerjaan streaming TollApp:

  1. Pada halaman Gambaran Umum pekerjaan, pilih Hentikan.

  2. Tunggu beberapa saat hingga muncul pemberitahuan bahwa pekerjaan telah dihentikan.

  3. Di bawah judl TOPOLOGI PEKERJAAN, pilih <> Kueri

  4. Tempel kueri SQL streaming yang disesuaikan.

  5. Pilih Simpan untuk menyimpan kueri. Konfirmasi Ya untuk menyimpan perubahan.

  6. Pada halaman Gambaran Umum pekerjaan, pilih Mulai.

  7. Pada panel Mulai pekerjaan, pilih Sekarang.

Meninjau total waktu dalam output

Ulangi langkah-langkah di bagian sebelumnya untuk meninjau data output Azure Cosmos DB dari pekerjaan streaming. Tinjau dokumen JSON yang terbaru.

Misalnya, dokumen ini menunjukkan contoh mobil dengan plat nomor tertentu, entrytime dan exit time, dan bidang terhitung durationinminutes DATEDIFF yang menunjukkan durasi pintu tol sebagai dua menit:

{
    "tollid": 4,
    "entrytime": "2018-04-05T06:51:39.0491173Z",
    "exittime": "2018-04-05T06:53:09.0491173Z",
    "licenseplate": "JVR 9425",
    "durationinminutes": 2,
    "id": "ff52eb25-d580-7566-2879-1f52bba6601e",
    "_rid": "+8E4AI1DZgBjAAAAAAAAAA==",
    "_self": "dbs/+8E4AA==/colls/+8E4AI1DZgA=/docs/+8E4AI1DZgBjAAAAAAAAAA==/",
    "_etag": "\"ad02f6b8-0000-0000-0000-5ac5c8330000\"",
    "_attachments": "attachments/",
    "_ts": 1522911283
}

Melaporkan kendaraan yang pendaftarannya kedaluwarsa

Azure Stream Analytics dapat menggunakan rekam jepret statik dari data referensi untuk digabungkan dengan aliran temporal. Untuk mendemonstrasikan kemampuan ini, gunakan pertanyaan sampel berikut. Input Pendaftaran adalah file json blob statik yang mencantumkan kedaluwarsa tag lisensi. Dengan digabungkan di plat nomor, data referensi dibandingkan dengan setiap kendaraan yang melewati tol keduanya.

Jika kendaraan komersial terdaftar di perusahaan tol, maka kendaraan tersebut dapat melewati pintu tol tanpa dihentikan untuk diperiksa. Gunakan tabel pencarian pendaftaran untuk mengidentifikasi semua kendaraan komersial yang pendaftarannya telah kedaluwarsa.

SELECT EntryStream.EntryTime, EntryStream.LicensePlate, EntryStream.TollId, Registration.RegistrationId
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN Registration
ON EntryStream.LicensePlate = Registration.LicensePlate
WHERE Registration.Expired = '1'
  1. Ulangi langkah-langkah di bagian sebelumnya untuk memperbarui sintaks kueri pekerjaan streaming TollApp.

  2. Ulangi langkah-langkah di bagian sebelumnya untuk meninjau data output Azure Cosmos DB dari pekerjaan streaming.

Contoh output:

    {
        "entrytime": "2018-04-05T08:01:28.0252168Z",
        "licenseplate": "GMT 3221",
        "tollid": 1,
        "registrationid": "763220582",
        "id": "47db0535-9716-4eb2-db58-de7886966cbf",
        "_rid": "y+F8AJ9QWACSAQAAAAAAAA==",
        "_self": "dbs/y+F8AA==/colls/y+F8AJ9QWAA=/docs/y+F8AJ9QWACSAQAAAAAAAA==/",
        "_etag": "\"88007d8d-0000-0000-0000-5ac5d7e20000\"",
        "_attachments": "attachments/",
        "_ts": 1522915298
    }

Peluasan skala pekerjaan

Azure Stream Analytics dirancang untuk menskalakan secara elastis sehingga dapat menangani data dalam volume besar. Kueri Azure Stream Analytics dapat menggunakan klausul PARTITION BY untuk memberi tahu sistem bahwa langkah ini melakukan peluasan skala. PartitionId adalah kolom khusus yang ditambahkan sistem agar sesuai dengan ID partisi dari input (pusat aktivitas).

Untuk melakukan peluasan skala kueri ke partisi, edit sintaks kueri terhadap kode berikut:

SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*)AS Count
INTO CosmosDB
FROM EntryStream
TIMESTAMP BY EntryTime
PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

Untuk meningkatkan pekerjaan streaming ke lebih banyak unit streaming:

  1. Hentikan pekerjaan saat ini.

  2. Perbarui sintaksis kueri di halaman <> Kueri, dan simpan perubahannya.

  3. Di judul CONFIGURE pada pekerjaan streaming, pilih Skalakan.

  4. Geser penggeser Unit streaming dari 1 ke 6. Unit streaming menentukan jumlah daya komputasi yang dapat diterima pekerjaan. Pilih Simpan.

  5. Mulai pekerjaan streaming untuk menunjukkan skala tambahan. Azure Stream Analytics mendistribusikan pekerjaan di lebih banyak sumber daya komputasi dan mencapai throughput yang lebih baik, mempartisi pekerjaan di seluruh sumber daya menggunakan kolom yang ditunjuk dalam klausa PARTITION BY.

Memantau pekerjaan

Area MONITOR memuat statistik tentang pekerjaan yang sedang dijalankan. Konfigurasi pertama kali diperlukan untuk menggunakan akun penyimpanan di wilayah yang sama (beri nama tol seperti bagian lain dari dokumen ini).

Pemantauan pekerjaan Azure Stream Analytics

Anda juga dapat mengakses Log Aktivitas dari area Pengaturan dasbor pekerjaan.

Membersihkan sumber daya TollApp

  1. Hentikan pekerjaan Stream Analytics di portal Azure.

  2. Temukan grup sumber daya yang memuat delapan sumber daya yang terkait dengan template TollApp.

  3. Pilih Hapus grup sumber daya. Ketik nama grup sumber daya untuk mengonfirmasi penghapusan.

Kesimpulan

Solusi ini memperkenalkan Anda ke layanan Azure Stream Analytics. Ini menunjukkan cara mengonfigurasi input dan output untuk pekerjaan Azure Stream Analytics. Dengan menggunakan skenario Data Tol, solusi ini menjelaskan jenis masalah umum yang muncul di ruang data yang bergerak dan bagaimana mereka dapat diselesaikan dengan kueri sederhana seperti SQL di Azure Stream Analytics. Solusi ini menjelaskan konstruksi ekstensi SQL untuk bekerja dengan data temporal. Ini menunjukkan cara menggabungkan aliran, cara memperkaya aliran dengan data referensi statik, dan cara melakukan peluasan skala kueri untuk mencapai throughput yang lebih tinggi.

Meskipun solusi ini memberikan pengenalan yang baik, solusi ini tidak lengkap dengan cara apa pun. Anda dapat menemukan lebih banyak pola kueri menggunakan bahasa SAQL di Contoh kueri untuk pola penggunaan Azure Stream Analytics umum.