Vensterfuncties begrijpen
Een gemeenschappelijk doel van stroomverwerking is het aggregeren van gebeurtenissen in tijdelijke intervallen of vensters. Als u bijvoorbeeld het aantal sociale mediaberichten per minuut wilt tellen of de gemiddelde neerslag per uur wilt berekenen.
Azure Stream Analytics bevat systeemeigen ondersteuning voor vijf soorten tijdelijke vensterfuncties. Met deze functies kunt u tijdelijke intervallen definiëren waarin gegevens worden samengevoegd in een query. De ondersteunde vensterfuncties zijn Tumbling, Hopping, Sliding, Session en Snapshot.
Tumbling
Tumblingvensterfuncties segmenteren een gegevensstroom in een aaneengesloten reeks vaste grootte, niet-overlappende tijdsegmenten en werken ermee. Gebeurtenissen kunnen niet tot meer dan één tumblingvenster behoren.
In het voorbeeld van het Tumblingvenster, vertegenwoordigd door de volgende query, wordt de maximale leeswaarde in elk venster van één minuut gevonden. Vensterfuncties worden toegepast in Stream Analytics-taken met behulp van de GROUP BY-component van de querysyntaxis. De GROUP BY
component in de volgende query bevat de TumblingWindow()
functie, waarmee een venstergrootte van één minuut wordt opgegeven.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)
Hopping
Hopping window functions model geplande overlappende vensters, springen vooruit in de tijd door een vaste periode. Het is het gemakkelijkst om ze te beschouwen als Tumblingvensters die elkaar kunnen overlappen en vaker kunnen worden verzonden dan de venstergrootte. In feite zijn tumblingvensters gewoon een hoppingvenster waarvan hop
het gelijk is aan zijn size
. Wanneer u Hopping-vensters gebruikt, kunnen gebeurtenissen deel uitmaken van meer dan één vensterresultatenset.
Als u een hoppingvenster wilt maken, moet u drie parameters opgeven. De eerste parameter geeft de tijdseenheid aan, zoals seconde, minuut of uur. Met de volgende parameter wordt de venstergrootte ingesteld, waarmee wordt aangegeven hoe lang elk venster duurt. De laatste vereiste parameter is de hopgrootte, die aangeeft hoeveel elk venster vooruitgaat ten opzichte van de vorige. Er kan ook een optionele vierde parameter worden gebruikt die de offsetgrootte aangeeft.
In de volgende query ziet u hoe u een HoppingWindow()
locatie gebruikt waarop de timeunit
query is ingesteld second
. De windowsize
is 60 seconden en de hopsize
is 30 seconden. Deze query voert elke 30 seconden een gebeurtenis uit die de maximale leeswaarde bevat die de afgelopen 60 seconden heeft plaatsgevonden.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)
Glijdende
Schuifvensters genereren gebeurtenissen voor tijdstippen waarop de inhoud van het venster daadwerkelijk verandert. Dit functiemodel beperkt het aantal vensters dat moet worden overwogen. Azure Stream Analytics voert gebeurtenissen uit voor alleen de tijdstippen waarop een gebeurtenis het venster heeft ingevoerd of afgesloten. Als zodanig bevat elk venster minimaal één gebeurtenis. Gebeurtenissen in schuifvensters kunnen tot meer dan één schuifvenster behoren, vergelijkbaar met Hopping-vensters.
De volgende query gebruikt de SlidingWindow()
functie om de maximale leeswaarde te vinden in elk venster van één minuut waarin een gebeurtenis is opgetreden.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)
Sessie
Sessievensterfuncties clusteren gebeurtenissen die op vergelijkbare tijdstippen binnenkomen, waarbij tijdsperioden worden uitgefilterd waarin er geen gegevens zijn. Het heeft drie primaire parameters: time-out, maximale duur en partitioneringssleutel (optioneel).
Het exemplaar van de eerste gebeurtenis start een sessievenster. Stel dat er een andere gebeurtenis plaatsvindt binnen de opgegeven time-out van de laatst opgenomen gebeurtenis. In dat geval wordt het venster uitgebreid om de nieuwe gebeurtenis op te nemen. Als er echter geen andere gebeurtenissen plaatsvinden binnen de opgegeven time-outperiode, wordt het venster tijdens de time-out gesloten. Als gebeurtenissen binnen de opgegeven time-out blijven plaatsvinden, wordt het sessievenster verlengd totdat de maximale duur is bereikt.
De volgende query meet de lengte van gebruikerssessies door een SessionWindow
overstreamgegevens met een timeoutsize
van 20 seconden en een maximumdurationsize
van 60 seconden te maken.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)
Momentopname
Momentopnamevensters groeperen gebeurtenissen op identieke tijdstempelwaarden. In tegenstelling tot andere venstertypen is een specifieke vensterfunctie niet vereist. U kunt een momentopnamevenster gebruiken door de functie op te geven aan de System.Timestamp()
component van GROUP BY
uw query.
De volgende query zoekt bijvoorbeeld de maximale leeswaarde voor gebeurtenissen die precies op hetzelfde moment plaatsvinden.
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
wordt in de GROUP BY
component beschouwd als een definitie van een momentopnamevenster, omdat gebeurtenissen worden gegroepeerd in een venster op basis van de gelijkheid van tijdstempels.