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ı geçmiş kayıtlarla veya iş içgörüleri türetmek için 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 olun.
  • 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ş: "Hello, Toll!"

Ücretli istasyon yaygın bir olaydır. 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 yapılan kabinlerde, bir görevliye ücretli ödeme yapmak için durursunuz. Otomatik kabinlerde, her standın üstündeki bir sensör, geçiş gişesinden geçerken aracınızın ön camına yapıştırılmış bir RFID kartını tarar. Araçların bu ücretli istasyonlardan 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ışı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 otomobiller 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
TollID Ücretli bir standı benzersiz olarak tanımlayan ücretli stand kimliği
EntryTime Utc'de aracın ücretli standa giriş tarihi ve saati
LicensePlate Aracın plaka numarası
Durum Birleşik Devletler'da bir durum
Oluşturma Otomobil üreticisi
Model Otomobilin model numarası
VehicleType Binek araçlar için 1 veya ticari araçlar için 2
WeightType Tonlarca araç ağırlığı; Binek araçlar için 0
Bize ABD doları olarak ücretli değer
Etiket Otomobilde ödemeyi otomatik hale getiren e-Etiket; ödemenin el ile yapıldığı boş

Veri akışında çıkma

Çıkış veri akışı, ücretli istasyondan ayrılan otomobiller 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:00.0000000Z JNB 7001
1 2014-09-10T12:03:00.0000000Z YXZ 1001
3 2014-09-10T12:04:00.0000000Z ABC 1004
2 2014-09-10T12:07:00.0000000Z XYZ 1003
1 2014-09-10T12:08:00.0000000Z BNJ 1007
2 2014-09-10T12:07:00.0000000Z CDE 1007

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

Sütun Açıklama
TollID Ücretli bir standı benzersiz olarak tanımlayan ücretli stand kimliği
ExitTime UTC'de ücretli standdan 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

Sütunların kısa bir açıklaması aşağıdadı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ğiniz olmalıdı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 grubunda 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ında 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ında oturum açın.

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

  4. Benzersiz bir adla yeni bir kaynak grubu belirtin, örneğin MyTollBooth.

  5. Bir Azure konumu seçin.

  6. Saniye sayısı olarak bir Aralık belirtin. Bu değer, bir 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 etmeyi 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. Kaynak grubunda aşağıdaki kaynakların 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 Uygulaması

Ö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 ücretli standa giren araç sayısını saymanız gerektiğini varsayalım. Otoyol gişesinde sürekli araç girişi yapılan bir dere olduğundan, bunlar hiç durmayan bir dereye benzer giriş olaylarıdır. Akışı ölçmek için ölçülecek bir "zaman aralığı" tanımlamanız gerekir. Şimdi soruyu daha da geliştirelim: "Her üç dakikada bir 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 zaman ile ilgili yönlerini belirtmek için birkaç uzantı ekler. Daha fazla ayrıntı için sorguda kullanılan Zaman Yönetimi ve Pencere oluşturma 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, otoyolda bir araba her geçiş gişesine girdiğ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, bir araba otoyolda bir 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 varyasyonlarında 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 veri girişi, sorgu söz diziminin sonraki varyasyonlarında 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çirin

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

  2. Random-cosmos adlı ada <>sahip 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>Belgeleri'ni 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 LicensePlate sütunlarında iki giriş akışına katılın. 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 uzakta olması gerektiğini belirtmek için DATEDIFF işlevini kullanın. Ayrıca, bir arabanın ücretli istasyonda harcadığı 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ı arasındaki farka 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ğunu belirten bildirim için birkaç dakika bekleyin.

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

  4. Ayarlanmış 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çirme

Akış işinden Azure Cosmos DB çıkış 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 ve exit timeve ücretli stand 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ıtlara sahip araçları bildirme

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 hem ücretli hem de ücretli araçlardan geçen her araçla karşılaştırılır.

Ücretli şirkete kayıtlı bir ticari araç, denetim için durdurulmadan ücretli standdan geçebilir. Süresi dolmuş olan 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 çıkış verilerini gözden geçirmek için önceki bölümdeki adımları yineleyin.

Örnek çıkış:

    {
        "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ında 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çeklendir'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ümlere ayırır.

İş izleme

İzleyici alanı, çalışan iş hakkındaki istatistikleri içerir. Depolama hesabını aynı bölgede 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ında 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şlerin ve çıkışların nasıl yapılandırıldığını gösterdi. 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ümde, zamansal verilerle çalışmaya yönelik SQL uzantısı yapıları açıklanmıştı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 tamamlanmadı. Yaygın Stream Analytics kullanım desenleri için sorgu örnekleri bölümünde SAQL dilini kullanarak daha fazla sorgu deseni bulabilirsiniz.