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.
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
Untuk menggunakan lingkungan TollApp ke Azure, gunakan tautan ini untuk Menyebarkan Templat TollApp Azure.
Masuk ke portal Azure, jika diminta.
Pilih langganan tempat berbagai sumber daya ditagih.
Tentukan grup sumber daya baru, dengan nama unik, misalnya
MyTollBooth
.Pilih lokasi Azure.
Tentukan Interval sebagai jumlah detik. Nilai ini digunakan dalam contoh aplikasi web, untuk seberapa sering mengirim data ke pusat aktivitas.
Centang untuk menyetujui syarat dan ketentuan.
Pilih Sematkan ke dasbor agar Anda dapat dengan mudah menemukan sumber daya nantinya.
Pilih Beli untuk menyebarkan templat sampel.
Setelah beberapa saat, pemberitahuan muncul untuk mengonfirmasi Penyebaran berhasil.
Meninjau sumber daya TollApp Azure Stream Analytics
Masuk ke portal Azure.
Temukan Grup Sumber Daya yang Anda beri nama di bagian sebelumnya.
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
Mulai dari grup sumber daya di bagian sebelumnya, pilih pekerjaan streaming Stream Analytics yang dimulai dengan nama
tollapp
(nama berisi karakter acak untuk keunikan).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.
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.
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:
Pada halaman Gambaran Umum pekerjaan, pilih Mulai.
Pada panel Mulai pekerjaan, pilih Sekarang.
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
Temukan grup sumber daya yang memuat sumber daya TollApp.
Pilih Akun Azure Cosmos DB dengan pola nama tollapp<random>-cosmos.
Pilih judul Data Explorer untuk membuka halaman Data Explorer.
Luaskan tollAppDatabase>tollAppCollection>Dokumen.
Dalam daftar ID, beberapa dokumen ditampilkan setelah output tersedia.
Pilih setiap ID untuk meninjau dokumen JSON. Perhatikan setiap
tollid
,windowend time
, dan dari jendela tersebutcount of cars
.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:
Pada halaman Gambaran Umum pekerjaan, pilih Hentikan.
Tunggu beberapa saat hingga muncul pemberitahuan bahwa pekerjaan telah dihentikan.
Di bawah judl TOPOLOGI PEKERJAAN, pilih <> Kueri
Tempel kueri SQL streaming yang disesuaikan.
Pilih Simpan untuk menyimpan kueri. Konfirmasi Ya untuk menyimpan perubahan.
Pada halaman Gambaran Umum pekerjaan, pilih Mulai.
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'
Ulangi langkah-langkah di bagian sebelumnya untuk memperbarui sintaks kueri pekerjaan streaming TollApp.
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:
Hentikan pekerjaan saat ini.
Perbarui sintaksis kueri di halaman <> Kueri, dan simpan perubahannya.
Di judul CONFIGURE pada pekerjaan streaming, pilih Skalakan.
Geser penggeser Unit streaming dari 1 ke 6. Unit streaming menentukan jumlah daya komputasi yang dapat diterima pekerjaan. Pilih Simpan.
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).
Anda juga dapat mengakses Log Aktivitas dari area Pengaturan dasbor pekerjaan.
Membersihkan sumber daya TollApp
Hentikan pekerjaan Stream Analytics di portal Azure.
Temukan grup sumber daya yang memuat delapan sumber daya yang terkait dengan template TollApp.
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.