Vensterfuncties begrijpen

Voltooid

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, Sessionen Snapshot.

Tumbling

Tumbling vensterfuncties segmenteren een gegevensstroom in een aaneengesloten reeks vaste, niet-overlappende tijdsegmenten en voeren daar hun bewerkingen op uit. Gebeurtenissen kunnen niet tot meer dan één tumbling-venster behoren.

Een diagram dat een stroom illustreert met een reeks gebeurtenissen die zijn toegewezen aan tumblingvensters van 1 minuut.

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)

Springen

Hopping vensterfuncties die geplande overlappende vensters te modelleren, verschuiven vooruit in de tijd met een vaste periode. Het is het gemakkelijkst om ze te beschouwen als Tumbling windows die elkaar kunnen overlappen en daarbij vaker kunnen worden uitgezonden dan de venstergrootte. In feite zijn tumblingvensters gewoon een glijdend venster waarvan de hop gelijk is aan de size. Wanneer u Hopping-vensters gebruikt, kunnen gebeurtenissen deel uitmaken van meer dan één vensterresultatenset.

Het diagram illustreert een stroom met een reeks gebeurtenissen die zijn vastgelegd in 60 seconden overlappende vensters die elke 30 seconden optreden.

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.

De volgende query laat zien hoe u een HoppingWindow() gebruikt waarin de timeunit is ingesteld op 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)

Glijdend

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 glijdende vensters kunnen tot meer dan één glijdend venster behoren, vergelijkbaar met hoppingvensters.

Het diagram illustreert een stroom met een reeks gebeurtenissen die zijn toegewezen aan schuifvensters van 1 minuut.

In de volgende query wordt de SlidingWindow()-functie gebruikt om de maximale leeswaarde te vinden in elk venster van één minuut waarin een gebeurtenis heeft plaatsgevonden.

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

Sessie vensterfuncties clusteren gebeurtenissen die op vergelijkbare tijdstippen aankomen en filteren periodes zonder gegevens. Het heeft drie primaire parameters: time-out, maximale duur en partitioneringssleutel (optioneel).

Het diagram illustreert een stroom met een reeks gebeurtenissen die zijn toegewezen aan sessievensters met een time-out van 20 seconden en een maximale duur van 60 seconden.

Het voorkomen van de eerste gebeurtenis start een sessie-venster. 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 te maken over clickstreamgegevens met een timeoutsize van 20 seconden en een maximumdurationsize van 60 seconden.

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

Momentopname Windows groeperen gebeurtenissen op identieke tijdstempelwaarden. In tegenstelling tot andere venstertypen is een specifieke vensterfunctie niet vereist. U kunt een momentopnamevenster gebruiken door de System.Timestamp() functie op te geven aan de GROUP BY component van uw query.

Het diagram illustreert een stroom met een reeks gebeurtenissen die zijn toegewezen aan momentopnamevensters.

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.