Azure Stream Analytics ortak sorgu desenleri
Azure Stream Analytics sorguları, SQL benzeri bir sorgu dilinde ifade edilir. Dil yapıları Stream Analytics sorgu dili başvuru kılavuzunda belgelenmiştir.
Sorgu tasarımı, olay verilerini bir giriş akışından bir çıkış veri deposuna taşımak için basit geçiş mantığını ifade edebilir veya Stream Analytics kılavuzunu kullanarak IoT çözümü oluşturma bölümünde olduğu gibi çeşitli zaman pencerelerinin toplamlarını hesaplamak için zengin desenler eşleştirme ve zamana bağlı analiz işlemleri gerçekleştirebilir. Akış olaylarını birleştirmek için birden çok girişe veri katılabilir ve olay değerlerini zenginleştirmek için statik başvuru verilerine yönelik aramalar yapabilirsiniz. Ayrıca, birden fazla çıkışına veri yazabilirsiniz.
Bu makalede, gerçek dünyada senaryolar temelinde birkaç ortak sorgu desenlerine yönelik çözümler özetlenmektedir.
Desteklenen veri biçimleri
Azure Stream Analytics CSV, JSON ve avro veri biçimlerinde olayları işlemeyi destekler.
Hem JSON hem de avro, iç içe geçmiş nesneler (kayıtlar) veya diziler gibi karmaşık türler içerebilir. Bu karmaşık veri türleriyle çalışma hakkında daha fazla bilgi için bkz. JSON ve avro veri ayrıştırma makalesi.
Verileri birden çok çıkışına gönder
Birden çok Select deyimi, verileri farklı çıkış havuzları için çıkarmak üzere kullanılabilir. Örneğin, bir seçim eşik tabanlı bir uyarının çıktısını alabilir, başka bir deyişle olaylar BLOB depolama alanına çıktı verebilir.
Giriş:
| Marka | Saat |
|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z |
| Make1 | 2015-01-01T00:00:02.0000000 Z |
| Make2 | 2015-01-01T00:00:01.0000000 Z |
| Make2 | 2015-01-01T00:00:02.0000000 Z |
| Make2 | 2015-01-01T00:00:03.0000000 Z |
Çıktı ArchiveOutput:
| Marka | Saat |
|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z |
| Make1 | 2015-01-01T00:00:02.0000000 Z |
| Make2 | 2015-01-01T00:00:01.0000000 Z |
| Make2 | 2015-01-01T00:00:02.0000000 Z |
| Make2 | 2015-01-01T00:00:03.0000000 Z |
Çıkış AlertOutput:
| Marka | Saat | Count |
|---|---|---|
| Make2 | 2015-01-01T00:00:10.0000000 Z | 3 |
Sorgu:
SELECT
*
INTO
ArchiveOutput
FROM
Input TIMESTAMP BY Time
SELECT
Make,
System.TimeStamp() AS Time,
COUNT(*) AS [Count]
INTO
AlertOutput
FROM
Input TIMESTAMP BY Time
GROUP BY
Make,
TumblingWindow(second, 10)
HAVING
[Count] >= 3
Into yan tümcesi, verilerin yazılacağı çıkışların Stream Analytics belirtir. İlk seçim , girişten veri alan ve bunu ArchiveOutput adlı çıktıya gönderen bir geçiş sorgusu tanımlar. İkinci sorgu, sonuçları Alertoutput adlı bir aşağı akış uyarısı sistem çıktısına göndermeden önce bazı basit toplama ve filtreleme işlemi yapar.
WITH yan tümcesinin birden çok alt sorgu bloğu tanımlamak için kullanılabileceğini unutmayın. Bu seçenek, giriş kaynağına daha az okuyucu açma avantajına sahiptir.
Sorgu:
WITH ReaderQuery AS (
SELECT
*
FROM
Input TIMESTAMP BY Time
)
SELECT * INTO ArchiveOutput FROM ReaderQuery
SELECT
Make,
System.TimeStamp() AS Time,
COUNT(*) AS [Count]
INTO AlertOutput
FROM ReaderQuery
GROUP BY
Make,
TumblingWindow(second, 10)
HAVING [Count] >= 3
Daha fazla bilgi için bkz. WITH yan tümcesi.
Basit geçişli sorgu
Giriş akışı verilerini çıkışa kopyalamak için basit bir geçişli sorgu kullanılabilir. örneğin, gerçek zamanlı araç bilgilerini içeren bir veri akışının mektup analizi için bir SQL veritabanına kaydedilmesi gerekiyorsa, basit bir geçişli sorgu işi yapılır.
Giriş:
| Marka | Saat | Ağırlık |
|---|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z | "1000" |
| Make1 | 2015-01-01T00:00:02.0000000 Z | "2000" |
Çıkış:
| Marka | Saat | Ağırlık |
|---|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z | "1000" |
| Make1 | 2015-01-01T00:00:02.0000000 Z | "2000" |
Sorgu:
SELECT
*
INTO Output
FROM Input
Bir Select * sorgusu, gelen bir olaydaki tüm alanları ve bunları çıkışa gönderir. Aynı şekilde, Select , yalnızca girişte gerekli alanları proje için de kullanılabilir. Bu örnekte, araç Oluştur ve zaman , kaydedilecek tek gerekli alanlar Ise, bu alanlar Select ifadesinde belirlenebilir.
Giriş:
| Marka | Saat | Ağırlık |
|---|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z | 1000 |
| Make1 | 2015-01-01T00:00:02.0000000 Z | 2000 |
| Make2 | 2015-01-01T00:00:04.0000000 Z | 1500 |
Çıkış:
| Marka | Saat |
|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z |
| Make1 | 2015-01-01T00:00:02.0000000 Z |
| Make2 | 2015-01-01T00:00:04.0000000 Z |
Sorgu:
SELECT
Make, Time
INTO Output
FROM Input
LIKE ve LIKE ile eşleşen dize
LIKE ve LIKE , bir alanın belirli bir Düzenle eşleşip eşleşmediğini doğrulamak için kullanılabilir. Örneğin, yalnızca ' A ' harfiyle başlayan ve 9 sayısıyla biten lisans levhalarını döndürmek için bir filtre oluşturulabilir.
Giriş:
| Marka | License_plate | Saat |
|---|---|---|
| Make1 | ABC-123 | 2015-01-01T00:00:01.0000000 Z |
| Make2 | AAA-999 | 2015-01-01T00:00:02.0000000 Z |
| Make3 | ABC-369 | 2015-01-01T00:00:03.0000000 Z |
Çıkış:
| Marka | License_plate | Saat |
|---|---|---|
| Make2 | AAA-999 | 2015-01-01T00:00:02.0000000 Z |
| Make3 | ABC-369 | 2015-01-01T00:00:03.0000000 Z |
Sorgu:
SELECT
*
FROM
Input TIMESTAMP BY Time
WHERE
License_plate LIKE 'A%9'
License_plate alan değerini denetlemek için LIKE ifadesini kullanın. ' A ' harfiyle başlamalı, ardından 9 sayısıyla biten sıfır veya daha fazla karakter dizesi içermelidir.
Geçmiş olaylar üzerinde hesaplama
Lag işlevi, bir zaman penceresi içinde geçmiş olaylara bakmak ve bunları geçerli olaya göre karşılaştırmak için kullanılabilir. Örneğin, geçerli araba, ücretli olarak geçen son arabadan farklıysa, bu marka için de çıktı alınabilir.
Giriş:
| Marka | Saat |
|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z |
| Make2 | 2015-01-01T00:00:02.0000000 Z |
Çıkış:
| Marka | Saat |
|---|---|
| Make2 | 2015-01-01T00:00:02.0000000 Z |
Sorgu:
SELECT
Make,
Time
FROM
Input TIMESTAMP BY Time
WHERE
LAG(Make, 1) OVER (LIMIT DURATION(minute, 1)) <> Make
Giriş akışına bir olay geri getirmek için, Oluştur değerini alarak ve bunu geçerli olayın Make değeri ile karşılaştırarak ve olayı çıkış olarak bir olay öğesine göz atın.
Daha fazla bilgi için, lagadresine bakın.
Penceredeki son olayı döndürür
Olaylar, sistem tarafından gerçek zamanlı olarak tüketildiği için, bir olayın o zaman penceresinde gelmesi için en son bir olay olacağını belirleyemeyen bir işlev yoktur. Bu işlemi gerçekleştirmek için, giriş akışının bir olay zamanının, o penceredeki tüm olaylar için en uzun süredir olması gerekir.
Giriş:
| License_plate | Marka | Saat |
|---|---|---|
| DXE 5291 | Make1 | 2015-07-27T00:00:05.0000000 Z |
| YıLZK 5704 | Make3 | 2015-07-27T00:02:17.0000000 Z |
| RMV 8282 | Make1 | 2015-07-27T00:05:01.0000000 Z |
| YıLHN 6970 | Make2 | 2015-07-27T00:06:00.0000000 Z |
| VFE 1616 | Make2 | 2015-07-27T00:09:31.0000000 Z |
| QYıF 9358 | Make1 | 2015-07-27T00:12:02.0000000 Z |
| MDR 6128 | Make4 | 2015-07-27T00:13:45.0000000 Z |
Çıkış:
| License_plate | Marka | Saat |
|---|---|---|
| VFE 1616 | Make2 | 2015-07-27T00:09:31.0000000 Z |
| MDR 6128 | Make4 | 2015-07-27T00:13:45.0000000 Z |
Sorgu:
WITH LastInWindow AS
(
SELECT
MAX(Time) AS LastEventTime
FROM
Input TIMESTAMP BY Time
GROUP BY
TumblingWindow(minute, 10)
)
SELECT
Input.License_plate,
Input.Make,
Input.Time
FROM
Input TIMESTAMP BY Time
INNER JOIN LastInWindow
ON DATEDIFF(minute, Input, LastInWindow) BETWEEN 0 AND 10
AND Input.Time = LastInWindow.LastEventTime
Sorgudaki ilk adım, bu pencerenin son olayının zaman damgası olan 10 dakikalık Windows 'da en fazla zaman damgasını bulur. İkinci adım, her penceredeki son damgalar ile eşleşen olayı bulmak için ilk sorgunun sonuçlarını orijinal akışa birleştirir.
DATEDIFF , Iki tarih saat alanı arasındaki zaman farkını karşılaştıran ve döndüren tarihe özgü bir işlevdir. daha fazla bilgi için date işlevlerinebakın.
Akışlara katılma hakkında daha fazla bilgi için bkz. JOIN.
Zaman içinde veri toplama
Bir zaman penceresinde bilgileri hesaplamak için, veriler birlikte toplanabilir. Bu örnekte, bir sayı her bir otomobil yapması için son 10 saniyelik süre içinde hesaplanır.
Giriş:
| Marka | Saat | Ağırlık |
|---|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z | 1000 |
| Make1 | 2015-01-01T00:00:02.0000000 Z | 2000 |
| Make2 | 2015-01-01T00:00:04.0000000 Z | 1500 |
Çıkış:
| Marka | Sayı |
|---|---|
| Make1 | 2 |
| Make2 | 1 |
Sorgu:
SELECT
Make,
COUNT(*) AS Count
FROM
Input TIMESTAMP BY Time
GROUP BY
Make,
TumblingWindow(second, 10)
Bu toplama, otomobilleri her 10 saniyede bir yaparak gruplandırır ve sayar. Çıktı, ücretli olarak gelen otomobillerin marka ve sayısına sahiptir.
TumblingWindow, olayları birlikte gruplamak için kullanılan bir Pencereleme işlevidir. Bir toplama, tüm gruplanmış olaylar üzerine uygulanabilir. Daha fazla bilgi için bkz. Pencereleme işlevleri.
Toplama hakkında daha fazla bilgi için bkz. toplama işlevleri.
Düzenli aralıklarla çıkış değerleri
Düzensiz veya eksik olaylar söz konusu olduğunda, daha seyrek bir veri girişinden düzenli bir zaman aralığı çıkışı oluşturulabilir. Örneğin, en son görülen veri noktasını raporlayan her 5 saniyede bir olay oluşturun.
Giriş:
| Saat | Değer |
|---|---|
| "2014-01-01T06:01:00" | 1 |
| "2014-01-01T06:01:05" | 2 |
| "2014-01-01T06:01:10" | 3 |
| "2014-01-01T06:01:15" | 4 |
| "2014-01-01T06:01:30" | 5 |
| "2014-01-01T06:01:35" | 6 |
Çıkış (ilk 10 satır):
| Window_end | Last_event. Işınızda | Last_event. Deeri |
|---|---|---|
| 2014-01-01T14:01:00.000 Z | 2014-01-01T14:01:00.000 Z | 1 |
| 2014-01-01T14:01:05.000 Z | 2014-01-01T14:01:05.000 Z | 2 |
| 2014-01-01T14:01:10.000 Z | 2014-01-01T14:01:10.000 Z | 3 |
| 2014-01-01T14:01:15.000 Z | 2014-01-01T14:01:15.000 Z | 4 |
| 2014-01-01T14:01:20.000 Z | 2014-01-01T14:01:15.000 Z | 4 |
| 2014-01-01T14:01:25.000 Z | 2014-01-01T14:01:15.000 Z | 4 |
| 2014-01-01T14:01:30.000 Z | 2014-01-01T14:01:30.000 Z | 5 |
| 2014-01-01T14:01:35.000 Z | 2014-01-01T14:01:35.000 Z | 6 |
| 2014-01-01T14:01:40.000 Z | 2014-01-01T14:01:35.000 Z | 6 |
| 2014-01-01T14:01:45.000 Z | 2014-01-01T14:01:35.000 Z | 6 |
Sorgu:
SELECT
System.Timestamp() AS Window_end,
TopOne() OVER (ORDER BY Time DESC) AS Last_event
FROM
Input TIMESTAMP BY Time
GROUP BY
HOPPINGWINDOW(second, 300, 5)
Bu sorgu, her 5 saniyede bir olay oluşturur ve daha önce alınan son olayı çıkarır. Hoppingwindow süresi, sorgunun en son olayı bulmak için ne kadar doğru göründüğünü belirler.
Daha fazla bilgi için bkz. hopping penceresi.
Bir akıştaki olayları ilişkilendirme
Aynı akıştaki olayların bağıntılandırgetirilmesi, gecikme işlevi kullanılarak geçmiş olaylara bakarak yapılabilir. Örneğin , aynı kaynaktan gelen iki araba, son 90 saniye boyunca ücretsiz olarak her seferinde bir çıktı oluşturulabilir.
Giriş:
| Marka | License_plate | Saat |
|---|---|---|
| Make1 | ABC-123 | 2015-01-01T00:00:01.0000000 Z |
| Make1 | AAA-999 | 2015-01-01T00:00:02.0000000 Z |
| Make2 | DEF-987 | 2015-01-01T00:00:03.0000000 Z |
| Make1 | GHI-345 | 2015-01-01T00:00:04Z |
Çıktı:
| Marka | Saat | Current_car_license_plate | First_car_license_plate | First_car_time |
|---|---|---|---|---|
| Make1 | 2015-01-01T00:00:02Z | AAA-999 | ABC-123 | 2015-01-01T00:00:01Z |
Sorgu:
SELECT
Make,
Time,
License_plate AS Current_car_license_plate,
LAG(License_plate, 1) OVER (LIMIT DURATION(second, 90)) AS First_car_license_plate,
LAG(Time, 1) OVER (LIMIT DURATION(second, 90)) AS First_car_time
FROM
Input TIMESTAMP BY Time
WHERE
LAG(Make, 1) OVER (LIMIT DURATION(second, 90)) = Make
LAG işlevi giriş akışına bir olay geriye bakarak Make değerini alabilir ve bunu geçerli olayın Make değeriyle karşılaştırarak alabilir. Koşul karşılandıktan sonra, SELECT deyiminde LAG kullanılarak önceki olaydan veriler projek olabilir.
Daha fazla bilgi için bkz. LAG.
Olaylar arasındaki süreyi algılama
Bir olayın süresi, bir Bitiş olayı alındıktan sonra son Başlangıç olayına bakarak hesap olabilir. Bu sorgu, kullanıcının bir sayfada veya özellikte harcadığı zamanı belirlemek için yararlı olabilir.
Giriş:
| Kullanıcı | Özellik | Olay | Saat |
|---|---|---|---|
| user@location.com | RightMenu | Başlangıç | 2015-01-01T00:00:01Z |
| user@location.com | RightMenu | End | 2015-01-01T00:00:08Z |
Çıktı:
| Kullanıcı | Özellik | Süre |
|---|---|---|
| user@location.com | RightMenu | 7 |
Sorgu:
SELECT
[user],
feature,
DATEDIFF(
second,
LAST(Time) OVER (PARTITION BY [user], feature LIMIT DURATION(hour, 1) WHEN Event = 'start'),
Time) as duration
FROM input TIMESTAMP BY Time
WHERE
Event = 'end'
LAST işlevi, belirli bir koşulda son olayı almak için kullanılabilir. Bu örnekte koşul, Başlat türünde bir olaydır ve aramanın KULLANıCıYA VE ÖZELLIĞE GÖRE BÖLÜMLENdir. Bu şekilde, Başlat olayı aranken her kullanıcı ve özellik bağımsız olarak değerlendirilir. LIMIT DURATION, End ve Start olayları arasındaki arama süresini 1 saat olarak sınırlar.
Benzersiz değerleri say
COUNT ve DISTINCT, bir zaman penceresi içinde akışta görünen benzersiz alan değerlerini saymak için kullanılabilir. 2 saniyelik bir pencerede ücretli otoyoldan geçen benzersiz arabaların sayısına göre bir sorgu oluşturulabilir.
Giriş:
| Marka | Saat |
|---|---|
| Make1 | 2015-01-01T00:00:01Z |
| Make1 | 2015-01-01T00:00:02Z |
| Make2 | 2015-01-01T00:00:01Z |
| Make2 | 2015-01-01T00:00:02Z |
| Make2 | 2015-01-01T00:00:03Z |
Çıkış:
| Count_make | Saat |
|---|---|
| 2 | 2015-01-01T00:00:02Z |
| 1 | 2015-01-01T00:00:04Z |
Sorgu:
SELECT
COUNT(DISTINCT Make) AS Count_make,
System.TIMESTAMP() AS Time
FROM Input TIMESTAMP BY TIME
GROUP BY
TumblingWindow(second, 2)
COUNT(DISTINCT Make), bir zaman penceresi içindeki Make sütunundaki benzersiz değerlerin sayısını döndürür. Daha fazla bilgi için COUNT toplama işlevine bakın.
Pencerede ilk olayı alma
IsFirst, bir zaman penceresindeki ilk olayı almak için kullanılabilir. Örneğin, 10 dakikalık aralıklarla ilk araba bilgilerini çıkış olarak vermek.
Giriş:
| License_plate | Marka | Saat |
|---|---|---|
| DXE 5291 | Make1 | 2015-07-27T00:00:05Z |
| YZK 5704 | Make3 | 2015-07-27T00:02:17Z |
| RMV 8282 | Make1 | 2015-07-27T00:05:01Z |
| YHN 6970 | Make2 | 2015-07-27T00:06:00Z |
| VFE 1616 | Make2 | 2015-07-27T00:09:31Z |
| QYF 9358 | Make1 | 2015-07-27T00:12:02Z |
| MDR 6128 | Make4 | 2015-07-27T00:13:45Z |
Çıktı:
| License_plate | Marka | Saat |
|---|---|---|
| DXE 5291 | Make1 | 2015-07-27T00:00:05Z |
| QYF 9358 | Make1 | 2015-07-27T00:12:02Z |
Sorgu:
SELECT
License_plate,
Make,
Time
FROM
Input TIMESTAMP BY Time
WHERE
IsFirst(minute, 10) = 1
IsFirst ayrıca verileri bölümleyer ve her 10 dakikalık aralıklarla bulunan her bir araba için ilk olayı hesaplar.
Çıktı:
| License_plate | Marka | Saat |
|---|---|---|
| DXE 5291 | Make1 | 2015-07-27T00:00:05Z |
| YZK 5704 | Make3 | 2015-07-27T00:02:17Z |
| YHN 6970 | Make2 | 2015-07-27T00:06:00Z |
| QYF 9358 | Make1 | 2015-07-27T00:12:02Z |
| MDR 6128 | Make4 | 2015-07-27T00:13:45Z |
Sorgu:
SELECT
License_plate,
Make,
Time
FROM
Input TIMESTAMP BY Time
WHERE
IsFirst(minute, 10) OVER (PARTITION BY Make) = 1
Daha fazla bilgi için bkz. IsFirst.
Pencere içinde yinelenen olayları kaldırma
Belirli bir zaman penceresindeki olaylar üzerinden ortalamaları hesaplama gibi bir işlem gerçekleştirerek yinelenen olayların filtrelenmiş olması gerekir. Aşağıdaki örnekte, ikinci olay birincinin yinelemesidir.
Giriş:
| DeviceId | Saat | Öznitelik | Değer |
|---|---|---|---|
| 1 | 2018-07-27T00:00:01Z | Sıcaklık | 50 |
| 1 | 2018-07-27T00:00:01Z | Sıcaklık | 50 |
| 2 | 2018-07-27T00:00:01Z | Sıcaklık | 40 |
| 1 | 2018-07-27T00:00:05Z | Sıcaklık | 60 |
| 2 | 2018-07-27T00:00:05Z | Sıcaklık | 50 |
| 1 | 2018-07-27T00:00:10Z | Sıcaklık | 100 |
Çıktı:
| AverageValue | DeviceId |
|---|---|
| 70 | 1 |
| 45 | 2 |
Sorgu:
With Temp AS (
SELECT
COUNT(DISTINCT Time) AS CountTime,
Value,
DeviceId
FROM
Input TIMESTAMP BY Time
GROUP BY
Value,
DeviceId,
SYSTEM.TIMESTAMP()
)
SELECT
AVG(Value) AS AverageValue, DeviceId
INTO Output
FROM Temp
GROUP BY DeviceId,TumblingWindow(minute, 5)
COUNT(DISTINCT Time), bir zaman penceresi içindeki Zaman sütunundaki benzersiz değerlerin sayısını döndürür. İlk adımın çıktısı, yinelenenleri atarak cihaz başına ortalamayı hesaplamak için kullanılabilir.
Daha fazla bilgi için bkz. COUNT(DISTINCT Time).
Farklı servis/değer mantığı belirtme (CASE deyimleri)
CASE deyimleri, belirli ölçütlere göre farklı alanlar için farklı hesaplamalar sağlar. Örneğin, Make1'in arabalara 'A' şeridini ve 'B' şeridini diğer tüm markalara attay.
Giriş:
| Marka | Saat |
|---|---|
| Make1 | 2015-01-01T00:00:01Z |
| Make2 | 2015-01-01T00:00:02Z |
| Make2 | 2015-01-01T00:00:03Z |
Çıktı:
| Marka | Dispatch_to_lane | Saat |
|---|---|---|
| Make1 | "A" | 2015-01-01T00:00:01Z |
| Make2 | "B" | 2015-01-01T00:00:02Z |
Çözüm:
SELECT
Make
CASE
WHEN Make = "Make1" THEN "A"
ELSE "B"
END AS Dispatch_to_lane,
System.TimeStamp() AS Time
FROM
Input TIMESTAMP BY Time
CASE ifadesi, bir ifadeyi, sonucu belirlemek için bir dizi basit ifadeyle karşılaştırıldığında. Bu örnekte Make1 araçları 'A' şeridine, başka bir markanın araçlarına ise 'B' kulvarı atanır.
Daha fazla bilgi için durum ifadesine bakın.
Veri dönüştürme
Veriler, CAST yöntemi kullanılarak gerçek zamanlı olarak cast olabilir. Örneğin, araba ağırlığı, nvarchar (max) türünden bigint türüne dönüştürülebilir ve sayısal bir hesaplamada kullanılabilir.
Giriş:
| Marka | Saat | Ağırlık |
|---|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z | "1000" |
| Make1 | 2015-01-01T00:00:02.0000000 Z | "2000" |
Çıkış:
| Marka | Ağırlık |
|---|---|
| Make1 | 3000 |
Sorgu:
SELECT
Make,
SUM(CAST(Weight AS BIGINT)) AS Weight
FROM
Input TIMESTAMP BY Time
GROUP BY
Make,
TumblingWindow(second, 10)
Veri türünü belirtmek için bir cast ifadesini kullanın. Veri türlerinde desteklenen veri türleri listesine bakın (Azure Stream Analytics).
Veri dönüştürme işlevlerihakkında daha fazla bilgi için.
Bir koşulun süresini Algıla
Birden çok olayla yayılan koşullar için, bu koşulun süresini tanımlamak üzere lag işlevi kullanılabilir. Örneğin, bir hata, tüm otomobillerin yanlış ağırlığa (20.000 sterlini üzerinde) sahip olduğunu ve bu hatanın süresinin hesaplanması gerektiğini varsayalım.
Giriş:
| Marka | Saat | Ağırlık |
|---|---|---|
| Make1 | 2015-01-01T00:00:01.0000000 Z | 2000 |
| Make2 | 2015-01-01T00:00:02.0000000 Z | 25000 |
| Make1 | 2015-01-01T00:00:03.0000000 Z | 26000 |
| Make2 | 2015-01-01T00:00:04.0000000 Z | 25000 |
| Make1 | 2015-01-01T00:00:05.0000000 Z | 26000 |
| Make2 | 2015-01-01T00:00:06.0000000 Z | 25000 |
| Make1 | 2015-01-01T00:00:07.0000000 Z | 26000 |
| Make2 | 2015-01-01T00:00:08.0000000 Z | 2000 |
Çıkış:
| Start_fault | End_fault |
|---|---|
| 2015-01-01T00:00:02.000 Z | 2015-01-01T00:00:07.000 Z |
Sorgu:
WITH SelectPreviousEvent AS
(
SELECT
*,
LAG([time]) OVER (LIMIT DURATION(hour, 24)) as previous_time,
LAG([weight]) OVER (LIMIT DURATION(hour, 24)) as previous_weight
FROM input TIMESTAMP BY [time]
)
SELECT
LAG(time) OVER (LIMIT DURATION(hour, 24) WHEN previous_weight < 20000 ) [Start_fault],
previous_time [End_fault]
FROM SelectPreviousEvent
WHERE
[weight] < 20000
AND previous_weight > 20000
İlk Select ifadesinin geçerli ağırlık ölçüsünü önceki ölçümle karşılıklı olarak ilişkilendirir ve geçerli ölçümle birlikte yansıtıyorsunuz. İkinci seçim , previous_weight 20000 ' den küçük olan son olaya geri dönerek geçerli ağırlığın 20000 ' den küçük olduğu ve geçerli olayın previous_weight 20000.
End_fault, önceki olayın hatalı olduğu ve Start_fault önce son hatalı olmayan olaydır.
Bağımsız bir zamana sahip olayları işle (alt akışlar)
Olaylar, Event üreticileri, bölümler arasındaki saat eğetkinlikleri veya ağ gecikmesi arasındaki saat eğlemeleri nedeniyle geçmiş veya sıra dışı olabilir. Örneğin, tollıd 2 için cihaz saati, tollıd 1 ' in arkasında beş saniyedir ve tollıd 3 Için cihaz saati, tollıd 1 ' in arkasında on saniyedir. Hesaplama her ücretli için bağımsız olarak gerçekleşebilir ve yalnızca kendi saat verileri zaman damgası olarak ele alabilir.
Giriş:
| Licenselevha | Marka | Saat | Tollıd |
|---|---|---|---|
| DXE 5291 | Make1 | 2015-07-27T00:00:01.0000000 Z | 1 |
| YıLHN 6970 | Make2 | 2015-07-27T00:00:05.0000000 Z | 1 |
| QYıF 9358 | Make1 | 2015-07-27T00:00:01.0000000 Z | 2 |
| GXF 9462 | Make3 | 2015-07-27T00:00:04.0000000 Z | 2 |
| VFE 1616 | Make2 | 2015-07-27T00:00:10.0000000 Z | 1 |
| RMV 8282 | Make1 | 2015-07-27T00:00:03.0000000 Z | 3 |
| MDR 6128 | Make3 | 2015-07-27T00:00:11.0000000 Z | 2 |
| YıLZK 5704 | Make4 | 2015-07-27T00:00:07.0000000 Z | 3 |
Çıkış:
| Tollıd | Count |
|---|---|
| 1 | 2 |
| 2 | 2 |
| 1 | 1 |
| 3 | 1 |
| 2 | 1 |
| 3 | 1 |
Sorgu:
SELECT
TollId,
COUNT(*) AS Count
FROM input
TIMESTAMP BY Time OVER TollId
GROUP BY TUMBLINGWINDOW(second, 5), TollId
Yan tümce üzerinden zaman damgası , alt akışlar kullanılarak her bir cihaz zaman çizelgesine göre görünür. Her bir Tollıd için çıkış olayı, hesaplandıkları sırada oluşturulur. Bu, olayların, tüm cihazlar aynı saat üzerinde olduğu gibi yeniden sıralamak yerine her bir tollıd 'e göre olduğu anlamına gelir.
Daha fazla bilgi için bkz. zaman damgasına.
Oturum Windows
Oturum penceresi, belirli bir süre sonra veya pencere en uzun süreye ulaşırsa, olay gerçekleştiğinde Genişlemeden ve hesaplama için kapanmaya devam eden bir penceredir. Bu pencere, Kullanıcı etkileşimi verileri hesaplanırken özellikle faydalıdır. Bir pencere, bir Kullanıcı sistemle etkileşime başladığında başlar ve başka hiçbir olay gözlemleniyorsa, yani Kullanıcı etkileşime göre durmuşsa kapatır. Örneğin, bir Kullanıcı, tıklama sayısının günlüğe kaydedildiği bir Web sayfasıyla etkileşim kurmuştur, kullanıcının siteyle ne kadar süre içinde işlem açtığını öğrenmek için bir oturum penceresi kullanılabilir.
Giriş:
| User_id | Saat | URL |
|---|---|---|
| 0 | 2017-01-26T00:00:00.0000000 Z | "www.example.com/a.html" |
| 0 | 2017-01-26T00:00:20.0000000 Z | "www.example.com/b.html" |
| 1 | 2017-01-26T00:00:55.0000000 Z | "www.example.com/c.html" |
| 0 | 2017-01-26T00:01:10.0000000 Z | "www.example.com/d.html" |
| 1 | 2017-01-26T00:01:15.0000000 Z | "www.example.com/e.html" |
Çıkış:
| User_id | StartTime | EndTime | Duration_in_seconds |
|---|---|---|---|
| 0 | 2017-01-26T00:00:00.0000000 Z | 2017-01-26T00:01:10.0000000 Z | 70 |
| 1 | 2017-01-26T00:00:55.0000000 Z | 2017-01-26T00:01:15.0000000 Z | 20 |
Sorgu:
SELECT
user_id,
MIN(time) as StartTime,
MAX(time) as EndTime,
DATEDIFF(second, MIN(time), MAX(time)) AS duration_in_seconds
FROM input TIMESTAMP BY time
GROUP BY
user_id,
SessionWindow(minute, 1, 60) OVER (PARTITION BY user_id)
Seç seçeneği , etkileşim süresiyle birlikte Kullanıcı etkileşimi ile ilgili verileri sağlar. Verileri kullanıcıya göre gruplandırma ve 1 dakika içinde hiçbir etkileşim gerçekleşmez, en fazla 60 dakikalık pencere boyutu olan bir sessionwindow .
Sessionwindow hakkında daha fazla bilgi Için oturum penceresine bakın.
JavaScript ve C 'de Kullanıcı tanımlı Işlev ile dil genişletilebilirliği
Azure Stream Analytics sorgu dili, JavaScript veya C# dilinde yazılmış özel işlevlerle genişletilebilir. kullanıcı tanımlı işlevler (UDF), SQL dili kullanılarak kolayca belirtilemez özel/karmaşık hesaplamalardır. Bu UDF 'ler bir kez tanımlanabilir ve bir sorgu içinde birden çok kez kullanılabilir. Örneğin, bir UDF onaltılık bir nvarchar (max) değerini bir bigint değerine dönüştürmek için kullanılabilir.
Giriş:
| Device_id | Onaltıdeğer |
|---|---|
| 1 | B4 |
| 2 | "11B" |
| 3 | "121" |
Çıkış:
| Device_id | Ondalık |
|---|---|
| 1 | 180 |
| 2 | 283 |
| 3 | 289 |
function hex2Int(hexValue){
return parseInt(hexValue, 16);
}
public static class MyUdfClass {
public static long Hex2Int(string hexValue){
return int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
}
}
SELECT
Device_id,
udf.Hex2Int(HexValue) AS Decimal
From
Input
Kullanıcı tanımlı Işlevi, tüketilen her olayda onaltılık değerden büyük tamsayı değerini hesaplacaktır.
Daha fazla bilgi için JavaScript ve C#bölümüne bakın.
MATCH_RECOGNIZE ile eşleşme gelişmiş desenler
MATCH_RECOGNIZE , bir olay dizisini iyi tanımlanmış bir normal ifade düzenine eşleştirmek için kullanılabilen gelişmiş bir model eşleştirme mekanizmasıdır. Örneğin, bir ATM, hatalara karşı gerçek zamanlı olarak izlenmekte, ancak yöneticiye bildirilmesi gereken iki ardışık uyarı iletisi varsa, bu, ATM 'nin çalışması sırasında.
Giriş:
| ATM_id | Operation_id | Return_Code | Saat |
|---|---|---|---|
| 1 | "PIN girme" | Başarılı | 2017-01-26T00:10:00.0000000 Z |
| 2 | "Para yuvası açılıyor" | "Başarılı" | 2017-01-26T00:10:07Z |
| 2 | "Kapanış Para Yuvası" | "Başarılı" | 2017-01-26T00:10:11Z |
| 1 | "Geri Çekilme Miktarını Girme" | "Başarılı" | 2017-01-26T00:10:08Z |
| 1 | "Para Yuvalarını Açma" | "Uyarı" | 2017-01-26T00:10:14Z |
| 1 | "Banka Bakiyesi Yazdırma" | "Uyarı" | 2017-01-26T00:10:19Z |
Çıktı:
| ATM_id | First_Warning_Operation_id | Warning_Time |
|---|---|---|
| 1 | "Para Yuvalarını Açma" | 2017-01-26T00:10:14Z |
SELECT *
FROM input TIMESTAMP BY time OVER ATM_id
MATCH_RECOGNIZE (
LIMIT DURATION(minute, 1)
PARTITON BY ATM_id
MEASURES
First(Warning.ATM_id) AS ATM_id,
First(Warning.Operation_Id) AS First_Warning_Operation_id,
First(Warning.Time) AS Warning_Time
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Success+ Warning{2,})
DEFINE
Success AS Succes.Return_Code = 'Success',
Warning AS Warning.Return_Code <> 'Success'
) AS patternMatch
Bu sorgu en az iki ardışık hata olayını eşler ve koşullar karşı geldiğinde bir alarm oluşturur. PATTERN, eşleştirmede kullanılacak normal ifadeyi tanımlar, bu durumda, en az bir başarılı işlemden sonra art arda gelen en az iki uyarı. Başarı ve Uyarı, Return_Code değeri kullanılarak tanımlanır ve koşul karşılandıktan sonra ÖLÇÜLER, ilk uyarı işlemi ATM_id ilk uyarı zamanı ile birlikte projeli olarak tanımlanır.
Daha fazla bilgi için bkz. MATCH_RECOGNIZE.
Coğrafi ve jeo-uzamsal sorgular
Azure Stream Analytics, filo yönetimi, yolculuk paylaşımı, bağlı arabalar ve varlık izleme gibi senaryoları uygulamak için kullanılmaktadır yerleşik jeo-uzamsal işlevler sağlar. Jeo-uzamsal veriler, olay akışı veya başvuru verileri kapsamında GeoJSON veya WKT biçimlerinden biri olarak kabul edilir. Örneğin, passport yazdırmak için üretim makineleri konusunda uzmanlaşmış olan bir şirket, makinelerini devletlere ve kiracılara kiralar. Bu makinelerin konumu, kimlik sahteciliği için yanlış kullanım ve olası kullanımdan kaçınmak için yoğun bir şekilde denetlenmektedir. Her makine bir GPS izleyicisi ile takıldı ve bu bilgiler bir gps Azure Stream Analytics aktarıldı. Üretim, bu makinelerin konumunu takip etmek ve yetkili bir alandan ayrılırsa uyarı almak, bu şekilde uzaktan devre dışı bırakılarak yetkilileri uyarmalarını ve ekipmanları almalarını sağlar.
Giriş:
| Equipment_id | Equipment_current_location | Saat |
|---|---|---|
| 1 | "POINT(-122.13288797982818 47.64082002051315)" | 2017-01-26T00:10:00Z |
| 1 | "POINT(-122.13307252987875 47.64081350934929)" | 2017-01-26T00:11:00Z |
| 1 | "POINT(-122.13308862313283 47.6406508603241)" | 2017-01-26T00:12:00Z |
| 1 | "POINT(-122.13341048821462 47.64043760861279)" | 2017-01-26T00:13:00Z |
Başvuru Veri Girişi:
| Equipment_id | Equipment_lease_location |
|---|---|
| 1 | "POLYGON((-122.13326028450979 47.6409833866794,-122.13261655434621 47.640983866794,-122.13261655434621 47.64061471602751,-122.13326028450979 47.64061471602751,-122.13326028450979 47.640983866794)" |
Çıktı:
| Equipment_id | Equipment_alert_location | Saat |
|---|---|---|
| 1 | "POINT(-122.13341048821462 47.64043760861279)" | 2017-01-26T00:13:00Z |
SELECT
input.Equipment_id AS Equipment_id,
input.Equipment_current_location AS Equipment_current_location,
input.Time AS Time
FROM input TIMESTAMP BY time
JOIN
referenceInput
ON input.Equipment_id = referenceInput.Equipment_id
WHERE
ST_WITHIN(input.Equipment_currenct_location, referenceInput.Equipment_lease_location) = 1
Sorgu, üreticinin makine konumunu otomatik olarak izlemesine olanak sağlar ve makine izin verilen bölgeyi terk edinca uyarılar alır. Yerleşik jeo-uzamsal işlev, kullanıcıların sorgu içindeki GPS verilerini üçüncü taraf kitaplıkları olmadan kullanmalarına olanak sağlar.
Daha fazla bilgi için Coğrafi ve jeo-uzamsal toplama senaryoları ile coğrafi Azure Stream Analytics bakın.
Yardım alın
Daha fazla yardım için microsoft Q&soru sayfamızı Azure Stream Analytics.