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

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

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.

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

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.

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

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).

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

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.

The diagram illustrates a stream with a series of events mapped into snapshot windows.

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.