Gyakori lekérdezési minták az Azure Stream Analyticsben

Az Azure Stream Analytics-lekérdezések egy SQL-hez hasonló lekérdezési nyelven vannak megadva. A nyelvi szerkezeteket a Stream Analytics lekérdezési nyelvi referencia-útmutatója dokumentálja.

A lekérdezésterv képes egyszerű átmenő logikát kifejezni az eseményadatok egy bemeneti adatfolyamból egy kimeneti adattárba való áthelyezéséhez, vagy gazdag mintaegyeztetési és időbeli elemzést végezhet az aggregátumok különböző időablakokban történő kiszámításához, mint az IoT-megoldás létrehozása a Stream Analytics-útmutatóval . A streamelési események kombinálásához több bemenet adatait is összekapcsolhatja, és statikus referenciaadatok alapján is kereshet az eseményértékek gazdagítása érdekében. Több kimenetbe is írhat adatokat.

Ez a cikk a valós forgatókönyveken alapuló gyakori lekérdezési minták megoldásait ismerteti.

Támogatott adatformátumok

Az Azure Stream Analytics támogatja az események CSV-, JSON- és Avro-adatformátumban történő feldolgozását. A JSON- és Avro-formátumok összetett típusokat, például beágyazott objektumokat (rekordokat) vagy tömböket tartalmazhatnak. Az összetett adattípusok használatával kapcsolatos további információkért lásd : JSON- és AVRO-adatok elemzése.

Adatok küldése több kimenetre

Több Standard kiadás LECT utasítással adhat ki adatokat különböző kimeneti fogadóknak. Egy Standard kiadás LECT utasítás például küszöbértékalapú riasztást tud kihozni, míg egy másik képes eseményeket kimenetelni egy blobtárolóba.

Vegye figyelembe a következő bemenetet:

| Make | Time |
| --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |
| Make1 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:01.0000000Z |
| Make2 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:03.0000000Z |

A lekérdezésből pedig a következő két kimenetet szeretné megkapni:

ArchiveOutput:

| Make | Time |
| --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |
| Make1 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:01.0000000Z |
| Make2 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:03.0000000Z |

AlertOutput:

| Make | Time | Count |
| --- | --- | --- |
| Make2 |2023-01-01T00:00:10.0000000Z |3 |

Lekérdezés két Standard kiadás LECT utasítással, az Archív kimenettel és a Riasztás kimenettel kimenetként:

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

Az INTO záradék közli a Stream Analytics szolgáltatással, hogy melyik kimenetbe írja az adatokat. Az első Standard kiadás LECT egy átmenő lekérdezést határoz meg, amely adatokat fogad a bemenetből, és elküldi azokat az ArchiveOutput nevű kimenetnek. A második lekérdezés összesíti és szűri az adatokat, mielőtt elküldené az eredményeket egy AlertOutput nevű alsóbb rétegbeli riasztási rendszer kimenetének.

A WITH záradék több albekérdezési blokk definiálására is használható. Ennek a beállításnak az az előnye, hogy kevesebb olvasót nyit meg a bemeneti forráshoz.

Lekérdezés:

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

További információ: WITH záradék.

Egyszerű átmenő lekérdezés

Egy egyszerű átmenő lekérdezéssel másolhatja a bemeneti adatfolyam adatait a kimenetbe. Ha például egy valós idejű járműinformációkat tartalmazó adatstreamet egy SQL-adatbázisban kell menteni későbbi elemzés céljából, egy egyszerű átmenő lekérdezés végzi el a feladatot.

Vegye figyelembe a következő bemenetet:

| Make | Time | Weight |
| --- | --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |"1000" |
| Make1 |2023-01-01T00:00:02.0000000Z |"2000" |

Azt szeretné, hogy a kimenet megegyezik a bemenettel:

| Make | Time | Weight |
| --- | --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |"1000" |
| Make1 |2023-01-01T00:00:02.0000000Z |"2000" |

A lekérdezés a következő:

SELECT
	*
INTO Output
FROM Input

Ez a Standard kiadás LECT * lekérdezés egy bejövő esemény összes mezőjét lekérdezi, és elküldi őket a kimenetnek. Ehelyett csak a szükséges mezőket vetítheti ki egy Standard kiadás LECT utasításban. Az alábbi példában a Standard kiadás LECT utasítás csak a bemeneti adatokBól származó Make és Time mezőket projektek.

Vegye figyelembe a következő bemenetet:

| Make | Time | Weight |
| --- | --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |1000 |
| Make1 |2023-01-01T00:00:02.0000000Z |2000 |
| Make2 |2023-01-01T00:00:04.0000000Z |1500 |

Azt szeretné, hogy a kimenet csak a Make and Time mezőkkel rendelkezzen:

| Make | Time |
| --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |
| Make1 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:04.0000000Z |

Az alábbi lekérdezés csak a szükséges mezőket projekteli:

SELECT
	Make, Time
INTO Output
FROM Input

Sztringegyezés a LIKE és a NOT LIKE kifejezéssel

A LIKE és a NOT LIKE használatával ellenőrizheti, hogy egy mező megfelel-e egy adott mintának. Szűrővel például csak a betűvel A kezdődő és a számmal 9végződő rendszámokat adja vissza.

Vegye figyelembe a következő bemenetet:

| Make | License_plate | Time |
| --- | --- | --- |
| Make1 |ABC-123 |2023-01-01T00:00:01.0000000Z |
| Make2 |AAA-999 |2023-01-01T00:00:02.0000000Z |
| Make3 |ABC-369 |2023-01-01T00:00:03.0000000Z |

Azt szeretné, hogy a kimenetben a betűvel A kezdődő és a számmal 9végződő rendszámtábla legyen:

| Make | License_plate | Time |
| --- | --- | --- |
| Make2 |AAA-999 |2023-01-01T00:00:02.0000000Z |
| Make3 |ABC-369 |2023-01-01T00:00:03.0000000Z |

Az alábbi lekérdezés a LIKE operátort használja:

SELECT
	*
FROM
	Input TIMESTAMP BY Time
WHERE
	License_plate LIKE 'A%9'

A LIKE utasítás használatával ellenőrizze a License_plate mező értékét. Ennek a betűvel Akell kezdődnie, majd bármilyen nulla vagy több karakterből álló sztringgel kell rendelkeznie, amely a 9-es számmal végződik.

A múltbeli események számítása

A LAG függvény segítségével megtekintheti a múltbeli eseményeket egy időablakon belül, és összehasonlíthatja őket az aktuális eseménysel. Az aktuális autó például akkor állítható ki, ha eltér az utolsó autóétól, amely áthaladt a fizetős standon.

Mintabemenet:

| Make | Time |
| --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |
| Make2 |2023-01-01T00:00:02.0000000Z |

Mintakimenet:

| Make | Time |
| --- | --- |
| Make2 |2023-01-01T00:00:02.0000000Z |

Minta lekérdezés:

SELECT
	Make,
	Time
FROM
	Input TIMESTAMP BY Time
WHERE
	LAG(Make, 1) OVER (LIMIT DURATION(minute, 1)) <> Make

A LAG használatával betekinthet a bemeneti streambe egy esemény visszakereséséhez, a Make érték lekéréséhez és az aktuális esemény Make értékéhez való összehasonlításához, majd az esemény kimenetéhez.

További információ: LAG.

Az utolsó esemény visszaadása egy ablakban

Mivel a rendszer valós időben használja fel az eseményeket, nincs olyan függvény, amely meg tudja állapítani, hogy az adott időablakhoz az utolsó esemény érkezik-e. Ennek eléréséhez a bemeneti streamet egy másikkal kell csatlakoztatni, ahol az esemény ideje az adott ablakban lévő összes esemény maximális ideje.

Mintabemenet:

| License_plate | Make | Time |
| --- | --- | --- |
| DXE 5291 |Make1 |2023-07-27T00:00:05.0000000Z |
| YZK 5704 |Make3 |2023-07-27T00:02:17.0000000Z |
| RMV 8282 |Make1 |2023-07-27T00:05:01.0000000Z |
| YHN 6970 |Make2 |2023-07-27T00:06:00.0000000Z |
| VFE 1616 |Make2 |2023-07-27T00:09:31.0000000Z |
| QYF 9358 |Make1 |2023-07-27T00:12:02.0000000Z |
| MDR 6128 |Make4 |2023-07-27T00:13:45.0000000Z |

Mintakimenet az utolsó autók adataival két tíz perces időablakban:

| License_plate | Make | Time |
| --- | --- | --- |
| VFE 1616 |Make2 |2023-07-27T00:09:31.0000000Z |
| MDR 6128 |Make4 |2023-07-27T00:13:45.0000000Z |

Minta lekérdezés:

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

A lekérdezés első lépése megkeresi a maximális időbélyeget 10 perces ablakokban, vagyis az adott ablak utolsó eseményének időbélyegét. A második lépés összekapcsolja az első lekérdezés eredményeit az eredeti adatfolyammal, hogy megkeresse azt az eseményt, amely megfelel az egyes ablakok utolsó alkalommali bélyegeinek.

A DATEDIFF egy dátumspecifikus függvény, amely összehasonlítja és visszaadja a két DateTime mező közötti időeltéréseket. További információ: dátumfüggvények.

A streamek összekapcsolásáról további információt a JOIN című témakörben talál.

Adatösszesítés idővel

Az adatok időkereten keresztüli kiszámításához összesítheti az adatokat. Ebben a példában az utasítás kiszámítja a darabszámot az elmúlt 10 másodpercben egy adott autó minden egyes verziójához.

Mintabemenet:

| Make | Time | Weight |
| --- | --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |1000 |
| Make1 |2023-01-01T00:00:02.0000000Z |2000 |
| Make2 |2023-01-01T00:00:04.0000000Z |1500 |

Mintakimenet:

| Make | Count |
| --- | --- |
| Make1 | 2 |
| Make2 | 1 |

Lekérdezés:

SELECT
	Make,
	COUNT(*) AS Count
FROM
	Input TIMESTAMP BY Time
GROUP BY
	Make,
	TumblingWindow(second, 10)

Ez az összesítés a Make szerint csoportosítja az autókat, és 10 másodpercenként megszámolja őket. A kimenetben az útdíjszedőn áthaladó autók make és count értéke található.

A TumblingWindow egy ablakfüggvény, amellyel csoportosíthatja az eseményeket. Az összesítés az összes csoportosított eseményre alkalmazható. További információ: ablakfüggvények.

Az összesítéssel kapcsolatos további információkért tekintse meg az összesítő függvényeket.

Időszakosan kimeneti értékek

Ha az események hiányoznak vagy szabálytalanok, rendszeres intervallumkimenet hozható létre egy ritka adatbevitelből. Hozzon létre például egy eseményt 5 másodpercenként, amely a legutóbb látott adatpontot jelenti.

Mintabemenet:

| Time | Value |
| --- | --- |
| "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 |

Mintakimenet (első 10 sor):

| Window_end | Last_event.Time | Last_event.Value |
| --- | --- | --- |
| 2014-01-01T14:01:00.000Z |2014-01-01T14:01:00.000Z |1 |
| 2014-01-01T14:01:05.000Z |2014-01-01T14:01:05.000Z |2 |
| 2014-01-01T14:01:10.000Z |2014-01-01T14:01:10.000Z |3 |
| 2014-01-01T14:01:15.000Z |2014-01-01T14:01:15.000Z |4 |
| 2014-01-01T14:01:20.000Z |2014-01-01T14:01:15.000Z |4 |
| 2014-01-01T14:01:25.000Z |2014-01-01T14:01:15.000Z |4 |
| 2014-01-01T14:01:30.000Z |2014-01-01T14:01:30.000Z |5 |
| 2014-01-01T14:01:35.000Z |2014-01-01T14:01:35.000Z |6 |
| 2014-01-01T14:01:40.000Z |2014-01-01T14:01:35.000Z |6 |
| 2014-01-01T14:01:45.000Z |2014-01-01T14:01:35.000Z |6 |

Minta lekérdezés:

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)

Ez a lekérdezés 5 másodpercenként hoz létre eseményeket, és a korábban kapott utolsó eseményt adja ki. A HOPPINGWINDOW időtartama határozza meg, hogy a lekérdezés milyen messze néz ki a legújabb esemény megkereséséhez.

További információ: Hopping window.

Események korrelációja egy streamben

Az ugyanabban a streamben lévő események korrelációja a LAG függvény használatával a múltbeli eseményeket tekintheti meg. Egy kimenet például minden alkalommal létrehozható, amikor két egymást követő autó ugyanabból a Make-ből megy át az útdíj-standon az elmúlt 90 másodpercben.

Mintabemenet:

| Make | License_plate | Time |
| --- | --- | --- |
| Make1 |ABC-123 |2023-01-01T00:00:01.0000000Z |
| Make1 |AAA-999 |2023-01-01T00:00:02.0000000Z |
| Make2 |DEF-987 |2023-01-01T00:00:03.0000000Z |
| Make1 |GHI-345 |2023-01-01T00:00:04.0000000Z |

Mintakimenet:

| Make | Time | Current_car_license_plate | First_car_license_plate | First_car_time |
| --- | --- | --- | --- | --- |
| Make1 |2023-01-01T00:00:02.0000000Z |AAA-999 |ABC-123 |2023-01-01T00:00:01.0000000Z |

Minta lekérdezés:

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

A LAG függvény egy eseményt megvizsgálhat a bemeneti streamben, és lekérheti a Make értéket, összehasonlítva ezzel az aktuális esemény Make értékével. A feltétel teljesülése után az előző esemény adatai lag használatával vethetők előre a Standard kiadás LECT utasításban.

További információ: LAG.

Az események közötti időtartam észlelése

Az esemény időtartama úgy számítható ki, hogy egy záróesemény beérkezése után az utolsó indítási eseményt tekinti meg. Ez a lekérdezés hasznos lehet annak meghatározásához, hogy a felhasználó mennyi időt tölt egy lapon vagy szolgáltatásban.

Mintabemenet:

| User | Feature | Event | Time |
| --- | --- | --- | --- |
| user@location.com |RightMenu |Start |2023-01-01T00:00:01.0000000Z |
| user@location.com |RightMenu |End |2023-01-01T00:00:08.0000000Z |

Mintakimenet:

| User | Feature | Duration |
| --- | --- | --- |
| user@location.com |RightMenu |7 |

Minta lekérdezés:

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'

A LAST függvény használatával lekérheti az utolsó eseményt egy adott feltételen belül. Ebben a példában a feltétel egy Start típusú esemény, amely particionálást végez a keresés partíciónként felhasználó és szolgáltatás szerint. Így a rendszer minden felhasználót és funkciót függetlenül kezel a Start esemény keresésekor. A LIMIT DURATION a befejezési és a kezdési események között 1 órára korlátozza a keresést az időben.

Egyedi értékek megszámlálva

A DARAB és a DISTINCT segítségével megszámlálhatja a streamben egy időablakon belül megjelenő egyedi mezőértékek számát. Létrehozhat egy lekérdezést, amellyel kiszámíthatja, hogy egy 2 másodperces ablakban hány egyedi autó haladt át a fizetős standon.

Mintabemenet:

| Make | Time |
| --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |
| Make1 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:01.0000000Z |
| Make2 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:03.0000000Z |

Mintakimenet :

| Count_make | Time |
| --- | --- |
| 2 |2023-01-01T00:00:02.000Z |
| 1 |2023-01-01T00:00:04.000Z |

Minta lekérdezés:

SELECT
     COUNT(DISTINCT Make) AS Count_make,
     System.TIMESTAMP() AS Time
FROM Input TIMESTAMP BY TIME
GROUP BY 
     TumblingWindow(second, 2)

A DARAB(DISTINCT Make) a Make oszlopban lévő különböző értékek számát adja vissza egy időablakon belül. További információ: DARAB összesítő függvény.

Az első esemény lekérése egy ablakban

Az első eseményt egy időablakban is lekérheti IsFirst . Például 10 percenként adja ki az első autóinformációt.

Mintabemenet:

| License_plate | Make | Time |
| --- | --- | --- |
| DXE 5291 |Make1 |2023-07-27T00:00:05.0000000Z |
| YZK 5704 |Make3 |2023-07-27T00:02:17.0000000Z |
| RMV 8282 |Make1 |2023-07-27T00:05:01.0000000Z |
| YHN 6970 |Make2 |2023-07-27T00:06:00.0000000Z |
| VFE 1616 |Make2 |2023-07-27T00:09:31.0000000Z |
| QYF 9358 |Make1 |2023-07-27T00:12:02.0000000Z |
| MDR 6128 |Make4 |2023-07-27T00:13:45.0000000Z |

Mintakimenet:

| License_plate | Make | Time |
| --- | --- | --- |
| DXE 5291 |Make1 |2023-07-27T00:00:05.0000000Z |
| QYF 9358 |Make1 |2023-07-27T00:12:02.0000000Z |

Minta lekérdezés:

SELECT 
	License_plate,
	Make,
	Time
FROM 
	Input TIMESTAMP BY Time
WHERE 
	IsFirst(minute, 10) = 1

Az IsFirst emellett particionálhatja az adatokat, és 10 percenként kiszámíthatja az első eseményt minden egyes autóhoz , amelyet a Make talált.

Mintakimenet:

| License_plate | Make | Time |
| --- | --- | --- |
| DXE 5291 |Make1 |2023-07-27T00:00:05.0000000Z |
| YZK 5704 |Make3 |2023-07-27T00:02:17.0000000Z |
| YHN 6970 |Make2 |2023-07-27T00:06:00.0000000Z |
| QYF 9358 |Make1 |2023-07-27T00:12:02.0000000Z |
| MDR 6128 |Make4 |2023-07-27T00:13:45.0000000Z |

Minta lekérdezés:

SELECT 
	License_plate,
	Make,
	Time
FROM 
	Input TIMESTAMP BY Time
WHERE 
	IsFirst(minute, 10) OVER (PARTITION BY Make) = 1

További információ: IsFirst.

Ismétlődő események eltávolítása egy ablakban

Ha olyan műveletet hajt végre, mint például egy adott időablak eseményei átlagának kiszámítása, ismétlődő eseményeket kell szűrni. A következő példában a második esemény az első ismétlődése.

Mintabemenet:

| DeviceId | Time | Attribute | Value |
| --- | --- | --- | --- |
| 1 |2018-07-27T00:00:01.0000000Z |Temperature |50 |
| 1 |2018-07-27T00:00:01.0000000Z |Temperature |50 |
| 2 |2018-07-27T00:00:01.0000000Z |Temperature |40 |
| 1 |2018-07-27T00:00:05.0000000Z |Temperature |60 |
| 2 |2018-07-27T00:00:05.0000000Z |Temperature |50 |
| 1 |2018-07-27T00:00:10.0000000Z |Temperature |100 |

Mintakimenet:

| AverageValue | DeviceId |
| --- | --- |
| 70 | 1 |
|45 | 2 |

Minta lekérdezés:

WITH Temp AS (
	SELECT 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)

Az első utasítás végrehajtásakor a duplikált rekordok egybe lesznek egyesítve, mivel a csoportosítási záradék mezői megegyeznek. Ezért eltávolítja az ismétlődéseket.

Különböző esetek/értékek logikájának megadása (CA Standard kiadás utasítások)

A CA Standard kiadás utasítások különböző számításokat biztosíthatnak különböző mezőkhöz, adott feltétel alapján. Például rendeljen sávot A az autókhoz Make1 , és sávot B bármely más eszközhöz.

Mintabemenet:

| Make | Time |
| --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |
| Make2 |2023-01-01T00:00:02.0000000Z |
| Make2 |2023-01-01T00:00:03.0000000Z |

Mintakimenet:

| Make |Dispatch_to_lane | Time |
| --- | --- | --- |
| Make1 |"A" |2023-01-01T00:00:01.0000000Z |
| Make2 |"B" |2023-01-01T00:00:02.0000000Z |

Minta lekérdezés:

SELECT
	Make
	CASE
		WHEN Make = "Make1" THEN "A"
		ELSE "B"
	END AS Dispatch_to_lane,
	System.TimeStamp() AS Time
FROM
	Input TIMESTAMP BY Time

A ca Standard kiadás kifejezés egy kifejezést egy egyszerű kifejezéskészlettel hasonlít össze az eredmény meghatározásához. Ebben a példában a járműveket Make1 a sávba A küldik, míg a többi járműhöz tartozó járműveket sávhoz Brendelik.

További információ: kis- és nagybetűk kifejezése.

Adatkonvertálás

Az adatok valós időben leadhatók a CAST metódussal. Az autó súlyát például átalakíthatja nvarchar(max) típusból bigint típussá, és numerikus számításban használható.

Mintabemenet:

| Make | Time | Weight |
| --- | --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |"1000" |
| Make1 |2023-01-01T00:00:02.0000000Z |"2000" |

Mintakimenet:

| Make | Weight |
| --- | --- |
| Make1 |3000 |

Minta lekérdezés:

SELECT
	Make,
	SUM(CAST(Weight AS BIGINT)) AS Weight
FROM
	Input TIMESTAMP BY Time
GROUP BY
	Make,
	TumblingWindow(second, 10)

A CAST utasítással adja meg az adattípusát. Tekintse meg az adattípusok (Azure Stream Analytics) támogatott adattípusainak listáját.

Az adatkonvertálási függvényekkel kapcsolatos további információkért.

Feltétel időtartamának észlelése

Több eseményre kiterjedő feltételek esetén a LAG függvény használható a feltétel időtartamának azonosítására. Tegyük fel például, hogy egy hiba miatt az összes autó súlya helytelen volt (20 000 font felett), és a hiba időtartamát ki kell számítani.

Mintabemenet:

| Make | Time | Weight |
| --- | --- | --- |
| Make1 |2023-01-01T00:00:01.0000000Z |2000 |
| Make2 |2023-01-01T00:00:02.0000000Z |25000 |
| Make1 |2023-01-01T00:00:03.0000000Z |26000 |
| Make2 |2023-01-01T00:00:04.0000000Z |25000 |
| Make1 |2023-01-01T00:00:05.0000000Z |26000 |
| Make2 |2023-01-01T00:00:06.0000000Z |25000 |
| Make1 |2023-01-01T00:00:07.0000000Z |26000 |
| Make2 |2023-01-01T00:00:08.0000000Z |2000 |

Mintakimenet:

| Start_fault | End_fault |
| --- | --- |
| 2023-01-01T00:00:02.000Z |2023-01-01T00:00:07.000Z |

Minta lekérdezés:

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

Az első Standard kiadás LECT utasítás korrelálja az aktuális súlymérést az előző méréssel, és az aktuális méréssel együtt vetíti ki. A második Standard kiadás LECT visszatekint az utolsó eseményre, ahol a previous_weight kisebb, mint 20000, ahol a jelenlegi súly kisebb, mint 20000, és a jelenlegi esemény previous_weight nagyobb volt, mint 20000.

A End_fault az a jelenlegi nem kifogástalan esemény, amelyben az előző esemény hibás volt, és a Start_fault az előző nem ismert esemény.

Események feldolgozása független idővel (alstreamek)

Az események későn vagy sorrenden kívül érkezhetnek az eseménygyártók közötti óraeltérés, a partíciók közötti óraeltérés vagy a hálózati késés miatt. A 2. útdíjazonosító eszközórái például öt másodperccel elmaradnak az 1. útdíjazonosítótól, a 3. útdíjazonosítóhoz pedig 10 másodperccel az 1. útdíjazonosítóhoz. A számítások minden útdíj esetében egymástól függetlenül is történhetnek, és csak a saját óraadatait tekintik időbélyegnek.

Mintabemenet:

| LicensePlate | Make | Time | TollID |
| --- | --- | --- | --- |
| DXE 5291 |Make1 |2023-07-27T00:00:01.0000000Z | 1 |
| YHN 6970 |Make2 |2023-07-27T00:00:05.0000000Z | 1 |
| QYF 9358 |Make1 |2023-07-27T00:00:01.0000000Z | 2 |
| GXF 9462 |Make3 |2023-07-27T00:00:04.0000000Z | 2 |
| VFE 1616 |Make2 |2023-07-27T00:00:10.0000000Z | 1 |
| RMV 8282 |Make1 |2023-07-27T00:00:03.0000000Z | 3 |
| MDR 6128 |Make3 |2023-07-27T00:00:11.0000000Z | 2 |
| YZK 5704 |Make4 |2023-07-27T00:00:07.0000000Z | 3 |

Mintakimenet:

| TollID | Count |
| --- | --- |
| 1 | 2 |
| 2 | 2 |
| 1 | 1 |
| 3 | 1 |
| 2 | 1 |
| 3 | 1 |

Minta lekérdezés:

SELECT
      TollId,
      COUNT(*) AS Count
FROM input
      TIMESTAMP BY Time OVER TollId
GROUP BY TUMBLINGWINDOW(second, 5), TollId

A TIMESTAMP OVER BY záradék az egyes eszközsorokat egymástól függetlenül, alstreamek használatával vizsgálja meg. Az egyes TollID-k kimeneti eseménye a számításuk során jön létre, ami azt jelenti, hogy az események sorrendben vannak az egyes TollID-okhoz képest ahelyett, hogy átrendeződnének, mintha az összes eszköz ugyanazon az órán volna.

További információ: TIMESTAMP BY OVER.

Munkamenet windows

A munkamenet-ablak egy olyan ablak, amely folyamatosan bővül az események bekövetkezésekor, és bezárul a számításhoz, ha egy adott idő elteltével nem érkezik esemény, vagy ha az ablak eléri a maximális időtartamot. Ez az ablak különösen hasznos a felhasználói interakciós adatok kiszámításakor. Az ablak akkor indul el, amikor egy felhasználó elkezdi használni a rendszert, és bezárul, amikor nem figyel meg több eseményt, vagyis a felhasználó leállt az interakcióval. Egy felhasználó például egy olyan weblapot használ, amelyen a kattintások száma naplózva van, a munkamenetablak segítségével megtudhatja, hogy a felhasználó mennyi ideig használta a webhelyet.

Mintabemenet:

| User_id | Time | URL |
| --- | --- | --- |
| 0 | 2017-01-26T00:00:00.0000000Z | "www.example.com/a.html" |
| 0 | 2017-01-26T00:00:20.0000000Z | "www.example.com/b.html" |
| 1 | 2017-01-26T00:00:55.0000000Z | "www.example.com/c.html" |
| 0 | 2017-01-26T00:01:10.0000000Z | "www.example.com/d.html" |
| 1 | 2017-01-26T00:01:15.0000000Z | "www.example.com/e.html" |

Mintakimenet:

| User_id | StartTime | EndTime | Duration_in_seconds |
| --- | --- | --- | --- |
| 0 | 2017-01-26T00:00:00.0000000Z | 2017-01-26T00:01:10.0000000Z | 70 |
| 1 | 2017-01-26T00:00:55.0000000Z | 2017-01-26T00:01:15.0000000Z | 20 |

Minta lekérdezés:

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)

A Standard kiadás LECT a felhasználói interakció szempontjából releváns adatokat, valamint az interakció időtartamát is kiveszi. Az adatok csoportosítása felhasználó és sessionWindow szerint, amely bezárul, ha 1 percen belül nem történik interakció, legfeljebb 60 perces ablakmérettel.

A SessionWindow szolgáltatással kapcsolatos további információkért lásd : Munkamenetablak .

Felhasználó által definiált függvények JavaScriptben és C-ben#

Az Azure Stream Analytics lekérdezési nyelve javaScript vagy C# nyelven írt egyéni függvényekkel bővíthető. A felhasználó által definiált függvények (UDF) olyan egyéni/összetett számítások, amelyek nem fejezhetők ki könnyen az SQL-nyelv használatával. Ezek az UDF-ek egyszer definiálhatók, és egy lekérdezésen belül többször is használhatók. Például egy UDF használatával hexadecimális nvarchar(max) értéket alakíthat át bigint értékké.

Mintabemenet:

| Device_id | HexValue |
| --- | --- |
| 1 | "B4" |
| 2 | "11B" |
| 3 | "121" |

Mintakimenet:

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

A felhasználó által definiált függvény kiszámítja a HexValue nagy értékét minden felhasznált eseményen.

További információ: JavaScript és C#.

Speciális mintaegyezés MATCH_RECOGNIZE

MATCH_RECOGNIZE egy speciális mintaegyeztetési mechanizmus, amely egy eseménysorozat és egy jól definiált reguláris kifejezésminta egyeztetésére használható. Egy ATM-et például valós időben figyel a rendszer a hibák esetén, az ATM működése során, ha két egymást követő figyelmeztető üzenet van, a rendszergazdát értesíteni kell.

Bemenet:

| ATM_id | Operation_id | Return_Code | Time |
| --- | --- | --- | --- |
| 1 | "Entering Pin" | "Success" | 2017-01-26T00:10:00.0000000Z |
| 2 | "Opening Money Slot" | "Success" | 2017-01-26T00:10:07.0000000Z |
| 2 | "Closing Money Slot" | "Success" | 2017-01-26T00:10:11.0000000Z |
| 1 | "Entering Withdraw Quantity" | "Success" | 2017-01-26T00:10:08.0000000Z |
| 1 | "Opening Money Slot" | "Warning" | 2017-01-26T00:10:14.0000000Z |
| 1 | "Printing Bank Balance" | "Warning" | 2017-01-26T00:10:19.0000000Z |

Kimenet:

| ATM_id | First_Warning_Operation_id | Warning_Time |
| --- | --- | --- |
| 1 | "Opening Money Slot" | 2017-01-26T00:10:14.0000000Z |
SELECT *
FROM input TIMESTAMP BY time OVER ATM_id
MATCH_RECOGNIZE (
	LIMIT DURATION(minute, 1)
	PARTITION 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

Ez a lekérdezés legalább két egymást követő hibaeseménynek felel meg, és riasztást hoz létre a feltételek teljesülése esetén. A PATTERN meghatározza az egyezéshez használandó reguláris kifejezést, ebben az esetben legalább két egymást követő figyelmeztetést legalább egy sikeres művelet után. A sikeresség és a figyelmeztetés Return_Code érték használatával van definiálva, és a feltétel teljesülése után a MÉRTÉKEK előrejelzése ATM_id, az első figyelmeztetési művelet és az első figyelmeztetési időpont.

További információ: MATCH_RECOGNIZE.

Geofencing és térinformatikai lekérdezések

Az Azure Stream Analytics beépített térinformatikai funkciókat biztosít, amelyek olyan forgatókönyvek implementálásához használhatók, mint a flottakezelés, az utazásmegosztás, a csatlakoztatott autók és az eszközkövetés. A térinformatikai adatok GeoJSON- vagy WKT-formátumban is betölthetők az eseménystreamek vagy referenciaadatok részeként. Például egy vállalat, amely útlevélnyomtatási gépek gyártására specializálódott, a gépeket a kormányoknak és a konzulátusoknak bérli. Ezeknek a gépeknek a helyét szigorúan ellenőrzik, hogy elkerülhető legyen az útlevélhamisítás és a hamisítás lehetséges felhasználása. Minden gép rendelkezik GPS-nyomkövetővel, amely az adatokat egy Azure Stream Analytics-feladatnak továbbítja. A gyártó szeretné nyomon követni ezeknek a gépeknek a helyét, és riasztást kap, ha az egyik elhagyja az engedélyezett területet, így távolról letilthatja, figyelmeztetheti a hatóságokat, és lekérheti a berendezést.

Bemenet:

| Equipment_id | Equipment_current_location | Time |
| --- | --- | --- |
| 1 | "POINT(-122.13288797982818 47.64082002051315)" | 2017-01-26T00:10:00.0000000Z |
| 1 | "POINT(-122.13307252987875 47.64081350934929)" | 2017-01-26T00:11:00.0000000Z |
| 1 | "POINT(-122.13308862313283 47.6406508603241)" | 2017-01-26T00:12:00.0000000Z |
| 1 | "POINT(-122.13341048821462 47.64043760861279)" | 2017-01-26T00:13:00.0000000Z |

Referenciaadat-bemenet:

| Equipment_id | Equipment_lease_location |
| --- | --- |
| 1 | "POLYGON((-122.13326028450979 47.6409833866794,-122.13261655434621 47.6409833866794,-122.13261655434621 47.64061471602751,-122.13326028450979 47.64061471602751,-122.13326028450979 47.6409833866794))" |

Kimenet:

| Equipment_id | Equipment_alert_location | Time |
| --- | --- | --- |
| 1 | "POINT(-122.13341048821462 47.64043760861279)" | 2017-01-26T00:13:00.0000000Z |
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

A lekérdezés lehetővé teszi a gyártó számára, hogy automatikusan monitorozza a gépek helyét, és riasztásokat kap, amikor egy gép elhagyja az engedélyezett földrajzi helyet. A beépített térinformatikai függvény lehetővé teszi a felhasználók számára, hogy külső kódtárak nélkül használják a lekérdezésen belüli GPS-adatokat.

További információ: Geofencing and geospatial aggregation scenarios with Azure Stream Analytics article.

Segítség kérése

További segítségért próbálja ki a Microsoft Q&A kérdésoldalát az Azure Stream Analyticshez.

Következő lépések