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 9
vé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 9
vé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 A
kell 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 B
rendelik.
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
- Az Azure Stream Analytics bemutatása
- Get started using Azure Stream Analytics (Bevezetés az Azure Stream Analytics használatába)
- Scale Azure Stream Analytics jobs (Azure Stream Analytics-feladatok méretezése)
- Azure Stream Analytics Query Language Reference (Referencia az Azure Stream Analytics lekérdezési nyelvhez)
- Az Azure Stream Analytics felügyeleti REST API referenciája