Stream Analytics kullanarak IoT çözümü oluşturma

Giriş

Bu çözümde, verilerinizden gerçek zamanlı içgörüler elde etmek için Azure Stream Analytics'i kullanmayı öğreneceksiniz. Geliştiriciler tıklama akışları, günlükler ve cihaz tarafından oluşturulan olaylar gibi veri akışlarını, iş içgörüleri türetmek için geçmiş kayıtları veya başvuru verileriyle kolayca birleştirebilir. Microsoft Azure'da barındırılan tam olarak yönetilen, gerçek zamanlı bir akış hesaplama hizmeti olan Azure Stream Analytics, dakikalar içinde çalışmaya başlamanızı sağlamak için yerleşik dayanıklılık, düşük gecikme süresi ve ölçeklenebilirlik sağlar.

Bu çözümü tamamladıktan sonra şunları yapabileceksiniz:

  • Azure Stream Analytics portalı hakkında bilgi sahibi olursunuz.
  • Akış işini yapılandırma ve dağıtma.
  • Gerçek dünya sorunlarını ifade edin ve Stream Analytics sorgu dilini kullanarak bunları çözün.
  • Stream Analytics'i güvenle kullanarak müşterileriniz için akış çözümleri geliştirin.
  • Sorunları gidermek için izleme ve günlüğe kaydetme deneyimini kullanın.

Önkoşullar

Bu çözümü tamamlamak için aşağıdaki önkoşullara ihtiyacınız vardır:

Senaryoya giriş: "Merhaba, Ücretli!"

Ücretli istasyon yaygın bir olgudur. Dünya genelinde birçok expressway, köprü ve tünelde onlarla karşılaşırsınız. Her ücretli istasyonda birden fazla gişe vardır. El ile kabinlerde, bir santrale ücretli ödeme yapmayı bırakırsınız. Otomatik kabinlerde, her kabinin üstündeki bir sensör, ücretli kabinden geçerken aracınızın ön camına yapıştırılan bir RFID kartını tarar. Bu ücretli istasyonlardan geçen araçların geçişini ilginç işlemlerin yapılabileceği bir etkinlik akışı olarak görselleştirmek kolaydır.

Ücretli gişelerdeki arabaların resmi

Gelen veriler

Bu çözüm iki veri akışıyla çalışır. Ücretli istasyonların giriş ve çıkışlarına monte edilen algılayıcılar ilk dereyi üretir. İkinci akış, araç kayıt verilerini içeren statik bir arama veri kümesidir.

Giriş veri akışı

Giriş veri akışı, ücretli istasyonlara girerken arabalar hakkında bilgi içerir. Çıkış verileri olayları, örnek uygulamaya dahil edilen bir Web Uygulamasından bir olay hub'ına canlı akışla aktarılır.

| 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 |

Sütunların kısa bir açıklaması aşağıdadır:

Sütun Açıklama
Ücretli Kimlik Ücretli bir kabini benzersiz olarak tanımlayan ücretli stand kimliği
EntryTime Utc'de aracın ücretli gişeye giriş tarihi ve saati
LicensePlate Aracın plaka numarası
Durum Birleşik Devletler'da bir durum
Marka Otomobil üreticisi
Modelleme Otomobilin model numarası
VehicleType Yolcu araçları için 1 veya ticari araçlar için 2
WeightType Ton olarak araç ağırlığı; Binek araçlar için 0
Ücretli ABD doları olarak ücretli değer
Etiket Otomobilde ödemeyi otomatik hale getiren e-Etiket; ödemenin el ile yapıldığı boş

Veri akışına çıkma

Çıkış veri akışı, ücretli istasyondan ayrılan arabalar hakkında bilgi içerir. Çıkış verileri olayları, örnek uygulamaya dahil edilen bir Web Uygulamasından bir olay hub'ına canlı akışla aktarılır.

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

Sütunların kısa bir açıklaması aşağıdadır:

Sütun Açıklama
Ücretli Kimlik Ücretli bir kabini benzersiz olarak tanımlayan ücretli stand kimliği
ExitTime UTC'de ücretli gişeden aracın çıkış tarihi ve saati
LicensePlate Aracın plaka numarası

Ticari araç kayıt verileri

Çözüm, ticari araç kayıt veritabanının statik anlık görüntüsünü kullanır. Bu veriler, örnekteki Azure blob depolama alanına JSON dosyası olarak kaydedilir.

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

Aşağıda sütunların kısa bir açıklaması yer alır:

Sütun Açıklama
LicensePlate Aracın plaka numarası
RegistrationId Aracın kayıt kimliği
Süresi doldu Aracın kayıt durumu: Araç kaydı etkinse 0, kayıt süresi dolmuşsa 1

Azure Stream Analytics için ortamı ayarlama

Bu çözümü tamamlamak için bir Microsoft Azure aboneliğine ihtiyacınız vardır. Azure hesabınız yoksa ücretsiz deneme sürümü isteyebilirsiniz.

Azure kredinizi en iyi şekilde kullanabilmeniz için bu makalenin sonundaki "Azure hesabınızı temizleme" bölümündeki adımları izlediğinizden emin olun.

Örneği dağıtma

Bir kaynak grubuna birkaç tıklamayla kolayca dağıtılabilir birkaç kaynak vardır. Çözüm tanımı, konumundaki https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollAppGitHub deposunda barındırılır.

Azure portal TollApp şablonunu dağıtma

  1. TollApp ortamını Azure'a dağıtmak için bu Bağlantıyı Kullanarak TollApp Azure Şablonunu Dağıtın.

  2. İstenirse Azure portal oturum açın.

  3. Çeşitli kaynakların faturalandırıldığı aboneliği seçin.

  4. Örneğin MyTollBooth, benzersiz bir adla yeni bir kaynak grubu belirtin.

  5. Bir Azure konumu seçin.

  6. Saniye sayısı olarak bir Aralık belirtin. Bu değer, olay hub'ına veri gönderme sıklığı için örnek web uygulamasında kullanılır.

  7. Hüküm ve koşulları kabul etmek için kontrol edin.

  8. Kaynakları daha sonra kolayca bulabilmek için Panoya sabitle'yi seçin.

  9. Örnek şablonu dağıtmak için Satın Al'ı seçin.

  10. Birkaç dakika sonra Dağıtımın başarılı olduğunu onaylayan bir bildirim görüntülenir.

Azure Stream Analytics TollApp kaynaklarını gözden geçirin

  1. Azure portalında oturum açın.

  2. Önceki bölümde adlandırdığınız Kaynak Grubunu bulun.

  3. Aşağıdaki kaynakların kaynak grubunda listelendiğini doğrulayın:

    • Bir Azure Cosmos DB Hesabı
    • Bir Azure Stream Analytics İşi
    • Bir Azure Depolama Hesabı
    • Bir Azure olay hub'ı
    • İki Web Apps

Örnek TollApp işini inceleme

  1. Önceki bölümdeki kaynak grubundan başlayarak, adıyla başlayan Stream Analytics akış işini seçin (ad tollapp benzersizlik için rastgele karakterler içerir).

  2. İşin Genel Bakış sayfasında , sorgu söz dizimini görüntülemek için Sorgu kutusuna dikkat edin.

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

    Sorgunun amacını ifade etmek için gişeye giren araç sayısını saymanız gerektiğini varsayalım. Otoyol gişesinde sürekli bir araç girişi akışı olduğundan, bunlar giriş olayları asla durmayan bir dereye benzer. Akışı ölçmek için ölçülecek bir "zaman aralığı" tanımlamanız gerekir. Şimdi soruyu daha da geliştirelim: "Her üç dakikada bir ücretli gişeye kaç araç giriyor?" Bu genellikle atlayan sayı olarak adlandırılır.

    Gördüğünüz gibi Azure Stream Analytics, SQL gibi bir sorgu dili kullanır ve sorgunun zamanla ilgili yönlerini belirtmek için birkaç uzantı ekler. Daha fazla ayrıntı için sorguda kullanılan Zaman Yönetimi ve Pencereleme yapıları hakkında bilgi edinin.

  3. TollApp örnek işinin Girişlerini inceleyin. Geçerli sorguda yalnızca EntryStream girişi kullanılır.

    • EntryStream girişi, bir araba otoyola her girişinde verileri temsil eden bir olay hub'ı bağlantısıdır. Örneğin parçası olan bir web uygulaması olayları oluşturur ve bu veriler bu olay hub'ında kuyruğa alınır. Bu girişin akış sorgusunun FROM yan tümcesinde sorgulandığını unutmayın.
    • ExitStream girişi, otobanda bir araç gişeden her çıkışta verileri temsil eden bir olay hub'ı bağlantısıdır. Bu akış girişi, sorgu söz diziminin sonraki çeşitlemelerinde kullanılır.
    • Kayıt girişi, gerektiğinde aramalar için kullanılan statik bir registration.json dosyasına işaret eden bir Azure Blob depolama bağlantısıdır. Bu başvuru verisi girişi, sorgu söz diziminin sonraki çeşitlemelerinde kullanılır.
  4. TollApp örnek işinin Çıkışlarını inceleyin.

    • Azure Cosmos DB çıkışı, çıkış havuzu olaylarını alan bir Azure Cosmos DB veritabanı kapsayıcısıdır. Bu çıkışın akış sorgusunun INTO yan tümcesinde kullanıldığını unutmayın.

TollApp akış işini başlatma

Akış işini başlatmak için şu adımları izleyin:

  1. İşin Genel Bakış sayfasında Başlat'ı seçin.

  2. İşi başlat bölmesinde Şimdi'yi seçin.

  3. Birkaç dakika sonra iş çalıştırıldıktan sonra akış işinin Genel Bakış sayfasında İzleme grafiğini görüntüleyin. Grafikte birkaç bin giriş olayı ve onlarca çıkış olayı gösterilmelidir.

Azure Cosmos DB çıkış verilerini gözden geçirme

  1. TollApp kaynaklarını içeren kaynak grubunu bulun.

  2. Name pattern tollapp<random-cosmos> adlı Azure Cosmos DB Hesabını seçin.

  3. Veri Gezgini sayfasını açmak için Veri Gezgini başlığını seçin.

  4. tollAppDatabase>tollAppCollection>Belgelerini genişletin.

  5. Kimlik listesinde, çıktı kullanılabilir olduğunda birkaç belge gösterilir.

  6. JSON belgesini gözden geçirmek için her kimliği seçin. Bu penceredeki her tollid, windowend timeve öğesine count of cars dikkat edin.

  7. Ek üç dakika sonra, her tollidbiri bir belge olmak üzere dört belgeden oluşan başka bir küme kullanılabilir.

Her araba için toplam süreyi raporla

Bir arabanın geçiş ücretinden geçmesi için gereken ortalama süre, sürecin verimliliğini ve müşteri deneyimini değerlendirmeye yardımcı olur.

Toplam süreyi bulmak için EntryTime akışına ExitTime akışıyla katılın. Eşit eşleşen TollId ve LicencePlate sütunlarında iki giriş akışını birleştirin. JOIN işleci, birleştirilen olaylar arasındaki kabul edilebilir zaman farkını açıklayan geçici bir yol belirtmenizi gerektirir. Olayların birbirinden en fazla 15 dakika uzak olması gerektiğini belirtmek için DATEDIFF işlevini kullanın. Ayrıca, bir arabanın ücretli istasyonda harcadığı gerçek zamanı hesaplamak için çıkış ve giriş zamanları için DATEDIFF işlevini uygulayın. JOIN koşulu yerine SELECT deyiminde kullanıldığında DATEDIFF kullanımının farkına dikkat edin.

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

TollApp akış işi sorgu söz dizimini güncelleştirmek için:

  1. İşin Genel Bakış sayfasında Durdur'u seçin.

  2. İşin durdurulduğuna ilişkin bildirim için birkaç dakika bekleyin.

  3. İş TOPOLOJİSİ başlığının altında Sorgu'yu seçin<>

  4. Düzeltilmiş akış SQL sorgusunu yapıştırın.

  5. Sorguyu kaydetmek için Kaydet'i seçin. Değişiklikleri kaydetmek için Evet'i onaylayın.

  6. İşin Genel Bakış sayfasında Başlat'ı seçin.

  7. İşi başlat bölmesinde Şimdi'yi seçin.

Çıktıdaki toplam süreyi gözden geçirin

Akış işinden Azure Cosmos DB çıktı verilerini gözden geçirmek için önceki bölümdeki adımları yineleyin. En son JSON belgelerini gözden geçirin.

Örneğin, bu belgede belirli bir plakaya sahip örnek bir araba, entrytime ve exit timeücretli kabin süresini iki dakika olarak gösteren DATEDIFF hesaplanan durationinminutes alanı gösterilmektedir:

{
    "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
}

Süresi dolan kayıtlarla ilgili rapor araçları

Azure Stream Analytics, zamansal veri akışlarına katılmak için başvuru verilerinin statik anlık görüntülerini kullanabilir. Bu özelliği göstermek için aşağıdaki örnek soruyu kullanın. Kayıt girişi, lisans etiketlerinin süre sonunu listeleyen statik bir blob json dosyasıdır. Referans verileri, plakaya katılarak her iki ücretli araç üzerinden geçen her araçla karşılaştırılır.

Ücretli şirkete kayıtlı bir ticari araç, muayene için durdurulmadan ücretli kabinden geçebilir. Kayıtların süresi dolmuş tüm ticari araçları tanımlamak için kayıt arama tablosunu kullanın.

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. TollApp akış işi sorgu söz dizimini güncelleştirmek için önceki bölümdeki adımları yineleyin.

  2. Akış işinden Azure Cosmos DB çıktı verilerini gözden geçirmek için önceki bölümdeki adımları yineleyin.

Örnek çıktı:

    {
        "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
    }

İşin ölçeğini genişletme

Azure Stream Analytics, büyük hacimli verileri işleyebilmesi için esnek bir şekilde ölçeklendirilecek şekilde tasarlanmıştır. Azure Stream Analytics sorgusu, sisteme bu adımın ölçeği genişletildiğini bildirmek için PARTITION BY yan tümcesini kullanabilir. PartitionId , sistemin girişin bölüm kimliğiyle (olay hub'ı) eşleşecek şekilde eklediği özel bir sütundur.

Sorgunun ölçeğini bölümlere genişletmek için sorgu söz dizimini aşağıdaki kodla düzenleyin:

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

Akış işinin ölçeğini daha fazla akış birimine genişletmek için:

  1. Geçerli işi durdurun.

  2. Sorgu sayfasındaki sorgu söz dizimini güncelleştirin <> ve değişiklikleri kaydedin.

  3. Akış işinin YAPıLANDıR başlığının altında Ölçek'i seçin.

  4. Akış birimleri kaydırıcısını 1'den 6'ya kaydırın. Akış birimleri, işin alabileceği işlem gücü miktarını tanımlar. Kaydet’i seçin.

  5. Ek ölçeği göstermek için akış işini başlatın. Azure Stream Analytics, işi daha fazla işlem kaynağı arasında dağıtır ve daha iyi aktarım hızı elde eder ve PARTITION BY yan tümcesinde belirlenen sütunu kullanarak işi kaynaklar arasında bölümler.

İş izleme

İzleme alanı, çalışan iş hakkındaki istatistikleri içerir. Aynı bölgedeki depolama hesabını kullanmak için ilk kez yapılandırma gerekir (bu belgenin geri kalanı gibi ad ücreti).

Azure Stream Analytics iş izleme

Etkinlik Günlüklerine iş panosu Ayarları alanından da erişebilirsiniz.

TollApp kaynaklarını temizleme

  1. Azure portal Stream Analytics işini durdurun.

  2. TollApp şablonuyla ilgili sekiz kaynak içeren kaynak grubunu bulun.

  3. Kaynak grubunu sil'i seçin. Silme işlemini onaylamak için kaynak grubunun adını yazın.

Sonuç

Bu çözüm sizi Azure Stream Analytics hizmetine tanıttı. Stream Analytics işi için giriş ve çıkışların nasıl yapılandırıldığı gösterilmiştir. Toll Data senaryosu kullanılarak çözüm, hareket halindeki verilerin alanında ortaya çıkan yaygın sorun türlerini ve Bunların Azure Stream Analytics'teki basit SQL benzeri sorgularla nasıl çözülebileceğini açıkladı. Çözüm, zamana bağlı verilerle çalışmaya yönelik SQL uzantısı yapılarını açıklamaktadır. Veri akışlarını birleştirmeyi, veri akışını statik başvuru verileriyle zenginleştirmeyi ve daha yüksek aktarım hızı elde etmek için sorgunun ölçeğini genişletmeyi gösterdi.

Bu çözüm iyi bir giriş sağlasa da hiçbir şekilde tamamlanmaz. Yaygın Stream Analytics kullanım desenleri için sorgu örnekleri bölümünde SAQL dilini kullanarak daha fazla sorgu deseni bulabilirsiniz.