Inleiding tot vensterfuncties van Stream Analytics

In tijdstreamingscenario's is het uitvoeren van bewerkingen op de gegevens in tijdelijke vensters een gemeenschappelijk patroon. Stream Analytics biedt systeemeigen ondersteuning voor vensterfuncties, waardoor ontwikkelaars complexe stroomverwerkingstaken met minimale inspanning kunnen maken.

Er zijn vijf soorten tijdelijke vensters waaruit u kunt kiezen:

U gebruikt de vensterfuncties in de GROUP BY-component van de querysyntaxis in uw Stream Analytics-taken. U kunt ook gebeurtenissen over meerdere vensters aggregeren met behulp van de functie Windows().

Alle vensterbewerkingen leveren resultaten op aan het einde van het venster. Wanneer u een Stream Analytics-taak start, kunt u de begintijd van de taakuitvoer opgeven en het systeem automatisch eerdere gebeurtenissen in de binnenkomende streams ophaalt om het eerste venster op het opgegeven tijdstip uit te voeren. Wanneer u bijvoorbeeld begint met de optie Nu, worden gegevens onmiddellijk verzonden. De uitvoer van het venster is één gebeurtenis op basis van de statistische functie die wordt gebruikt. De uitvoergebeurtenis heeft het tijdstempel van het einde van het venster en alle vensterfuncties worden gedefinieerd met een vaste lengte.

Diagram that shows the concept of Stream Analytics window functions.

Tumblingvenster

Gebruik Tumblingvensterfuncties om een gegevensstroom te segmenteren in afzonderlijke tijdsegmenten en om er een functie op uit te voeren.

De belangrijkste differentiators van een tumblingvenster zijn:

  • Ze herhalen het niet.
  • Ze overlappen elkaar niet.
  • Een gebeurtenis kan niet tot meer dan één tumblingvenster behoren.

Diagram that shows an example Stream Analytics tumbling window.

Dit zijn de invoergegevens voor het voorbeeld:

Stempel CreatedAt TimeZone
1 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

Dit is de voorbeeldquery:

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

Dit is de voorbeelduitvoer:

WindowEndTime TimeZone Tellen
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

Hopping-venster

Hopping-vensterfuncties springen vooruit in de tijd door een vaste periode. Het kan gemakkelijk zijn om ze te beschouwen als tumblingvensters die elkaar kunnen overlappen en vaker kunnen worden verzonden dan de venstergrootte. Gebeurtenissen kunnen deel uitmaken van meer dan één resultatenset van het hoppingvenster. Als u een hoppingvenster hetzelfde wilt maken als een Tumblingvenster, geeft u de hopgrootte op die gelijk is aan de venstergrootte.

Diagram that shows an example of the hopping window.

Dit zijn de voorbeeldgegevens:

Stempel CreatedAt Onderwerp
1 2021-10-26T10:15:01 Streaming
5 2021-10-26T10:15:03 Streaming
4 2021-10-26T10:15:06 Streaming
... ... ...

Dit is de voorbeeldquery:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

Dit is de voorbeelduitvoer:

WindowEndTime Onderwerp Tellen
2021-10-26T10:15:10 Streaming 5
2021-10-26T10:15:15 Streaming 3
2021-10-26T10:15:20 Streaming 2
2021-10-26T10:15:25 Streaming 4
2021-10-26T10:15:30 Streaming 4

Schuifvenster

Schuifvensters , in tegenstelling tot tumbling- of hoppingvensters, worden alleen uitgevoerd voor tijdstippen waarop de inhoud van het venster daadwerkelijk verandert. Met andere woorden, wanneer een gebeurtenis het venster binnenkomt of verlaat. Elk venster heeft dus ten minste één gebeurtenis. Net als bij hoppingvensters kunnen gebeurtenissen tot meer dan één schuifvenster behoren.

Diagram that shows an example of a sliding window.

Dit zijn de voorbeeldinvoergegevens:

Stempel CreatedAt Onderwerp
1 2021-10-26T10:15:10 Streaming
5 2021-10-26T10:15:12 Streaming
9 2021-10-26T10:15:15 Streaming
7 2021-10-26T10:15:15 Streaming
8 2021-10-26T10:15:27 Streaming

Dit is de voorbeeldquery:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

Uitvoer:

WindowEndTime Onderwerp Tellen
2021-10-26T10:15:15 Streaming 4
2021-10-26T10:15:20 Streaming 3

Sessievenster

Sessievensterfuncties groeperen gebeurtenissen die op vergelijkbare tijdstippen binnenkomen, waarbij perioden worden uitgefilterd waarin er geen gegevens zijn. Het heeft drie hoofdparameters:

  • Timeout
  • Maximale duur
  • Partitioneringssleutel (optioneel).

Diagram that shows a sample Stream Analytics session window.

Een sessievenster begint wanneer de eerste gebeurtenis plaatsvindt. Als er een andere gebeurtenis plaatsvindt binnen de opgegeven time-out van de laatst opgenomen gebeurtenis, wordt het venster uitgebreid met de nieuwe gebeurtenis. Als er geen gebeurtenissen plaatsvinden binnen de time-out, wordt het venster tijdens de time-out gesloten.

Als gebeurtenissen binnen de opgegeven time-out blijven optreden, wordt het sessievenster verlengd totdat de maximale duur is bereikt. De intervallen voor maximale duurcontrole zijn ingesteld op dezelfde grootte als de opgegeven maximale duur. Als de maximale duur bijvoorbeeld 10 is, controleert u of het venster de maximale duur overschrijdt op t = 0, 10, 20, 30, enzovoort.

Wanneer er een partitiesleutel wordt opgegeven, worden de gebeurtenissen gegroepeerd op basis van de sleutel en het sessievenster op elke groep afzonderlijk toegepast. Deze partitionering is handig voor gevallen waarin u verschillende sessievensters nodig hebt voor verschillende gebruikers of apparaten.

Dit zijn de voorbeeldinvoergegevens:

Stempel CreatedAt Onderwerp
1 2021-10-26T10:15:01 Streaming
2 2021-10-26T10:15:04 Streaming
3 2021-10-26T10:15:13 Streaming
... ... ...

Dit is de voorbeeldquery:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

Uitvoer:

WindowEndTime Onderwerp Tellen
2021-10-26T10:15:09 Streaming 2
2021-10-26T10:15:24 Streaming 4
2021-10-26T10:15:31 Streaming 2
2021-10-26T10:15:39 Streaming 1

Venster Momentopname

Momentopnamevensters groeperen gebeurtenissen met dezelfde tijdstempel. In tegenstelling tot andere venstertypen, waarvoor een specifieke vensterfunctie (zoals SessionWindow()) is vereist, kunt u een momentopnamevenster toepassen door System.Timestamp() toe te voegen aan de GROUP BY-component.

Diagram that shows a sample Steam Analytics snapshot window.

Dit zijn de voorbeeldinvoergegevens:

Stempel CreatedAt Onderwerp
1 2021-10-26T10:15:04 Streaming
2 2021-10-26T10:15:04 Streaming
3 2021-10-26T10:15:04 Streaming
... ... ...

Dit is de voorbeeldquery:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Dit is de voorbeelduitvoer:

WindowEndTime Onderwerp Tellen
2021-10-26T10:15:04 Streaming 4
2021-10-26T10:15:10 Streaming 2
2021-10-26T10:15:13 Streaming 1
2021-10-26T10:15:22 Streaming 2

Volgende stappen

Zie de volgende artikelen: