Inleiding tot Stream Analytics vensterfuncties
In scenario's met time-streaming is het uitvoeren van bewerkingen op de gegevens in tijdelijke vensters een veelvoorkomende patroon. Stream Analytics biedt systeemeigen ondersteuning voor vensterfuncties, waardoor ontwikkelaars met minimale inspanning complexe stroomverwerkingstaken kunnen schrijven.
Er zijn vijf soorten tijdelijke vensters waaruit u kunt kiezen: tumbling-, hopping-, sliding-, sessie-en momentopnamevensters. U gebruikt de vensterfuncties in de GROUP BY-component van de querysyntaxis in Stream Analytics taken. U kunt gebeurtenissen ook aggregeren via meerdere vensters met behulp van de functie Windows().
Alle vensterbewerkingen worden uitgevoerd aan het einde van het venster. Houd er rekening mee dat wanneer u een Stream Analytics-taak start, u de begintijd van de taakuitvoer kunt opgeven. Het systeem haalt automatisch eerdere gebeurtenissen op in de binnenkomende stromen om het eerste venster op het opgegeven tijdstip uit te geven; Wanneer u bijvoorbeeld met de optie Nu begint, begint deze onmiddellijk gegevens te zenden. 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.

Tumblingvenster
Tumblingvensterfuncties worden gebruikt om een gegevensstroom te segmenteren in verschillende tijdsegmenten en er een functie op uit te voeren, zoals in het onderstaande voorbeeld. De belangrijkste onderscheidende factoren van een TumblingWindow zijn dat ze herhalend zijn, niet overlappend, en dat een gebeurtenis maar tot één TumblingWindow kan behoren.

Met de volgende invoergegevens (zie hierboven):
| Stempel | CreatedAt | Tijdzone |
|---|---|---|
| 1 | 2021-10-26T10:15:01 | PST |
| 5 | 2021-10-26T10:15:03 | PST |
| 4 | 2021-10-26T10:15:06 | PST |
| ... | ... | ... |
De volgende query:
SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)
Retournt:
| WindowEndTime | Tijdzone | Count |
|---|---|---|
| 2021-10-26T10:15:10 | PST | 5 |
| 2021-10-26T10:15:20 | PST | 2 |
| 2021-10-26T10:15:30 | PST | 4 |
Hoppingvenster
Hoppingvensterfuncties hop vooruit in de tijd met een vaste periode. Ze kunnen gemakkelijk worden beschouwd als tumblingvensters die elkaar kunnen overlappen en vaker worden weergegeven dan de grootte van het venster. Gebeurtenissen kunnen deel uitmaken van meer dan één Hopping Window-resultatenset. Als u een Hopping-venster hetzelfde wilt maken als een tumblingvenster, geeft u de hopgrootte op die gelijk is aan de grootte van het venster.

Met de volgende invoergegevens (zie hierboven):
| Stempel | CreatedAt | Onderwerp |
|---|---|---|
| 1 | 2021-10-26T10:15:01 | Streaming |
| 5 | 2021-10-26T10:15:03 | Streaming |
| 4 | 2021-10-26T10:15:06 | Streaming |
| ... | ... | ... |
De volgende query:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)
Retournt:
| WindowEndTime | Onderwerp | Count |
|---|---|---|
| 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 |
Sliding window
Sliding windows, in tegenstelling tot Tumbling- of Hopping-vensters, voeren alleen gebeurtenissen uit voor tijdspunten wanneer 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 Hopping-vensters kunnen gebeurtenissen tot meer dan één sliding window.

Met de volgende invoergegevens (zie hierboven):
| 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 |
De volgende query:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3
Retournt:
| WindowEndTime | Onderwerp | Count |
|---|---|---|
| 2021-10-26T10:15:15 | Streaming | 4 |
| 2021-10-26T10:15:20 | Streaming | 3 |
Sessievenster
Sessievensterfuncties groeperen gebeurtenissen die op vergelijkbare tijdstippen binnenkomen, en filteren perioden waarin er geen gegevens zijn. Dit trefwoord heeft drie belangrijke parameters: time-out, maximale duur en partitioneringssleutel (optioneel).

Een sessievenster begint wanneer de eerste gebeurtenis plaatsvindt. Als een andere gebeurtenis plaatsvindt binnen de opgegeven time-out van de laatste opnamegebeurtenis, wordt het venster uitgebreid met de nieuwe gebeurtenis. Als er anders geen gebeurtenissen optreden binnen de time-out, wordt het venster gesloten bij de time-out.
Als gebeurtenissen binnen de opgegeven time-out blijven optreden, wordt het sessievenster uitgebreid totdat de maximale duur is bereikt. De maximale duurcontroleintervallen zijn ingesteld op dezelfde grootte als de opgegeven maximale duur. Als de maximale duur bijvoorbeeld 10 is, wordt gecontroleerd of het venster de maximale duur overschrijdt op t = 0, 10, 20, 30, enzovoort.
Wanneer een partitiesleutel wordt opgegeven, worden de gebeurtenissen gegroepeerd op basis van de sleutel en wordt het sessievenster onafhankelijk op elke groep toegepast. Deze partitionering is handig voor gevallen waarin u verschillende sessievensters nodig hebt voor verschillende gebruikers of apparaten.
Met de volgende invoergegevens (zie hierboven):
| Stempel | CreatedAt | Onderwerp |
|---|---|---|
| 1 | 2021-10-26T10:15:01 | Streaming |
| 2 | 2021-10-26T10:15:04 | Streaming |
| 3 | 2021-10-26T10:15:13 | Streaming |
| ... | ... | ... |
De volgende query:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)
Retournt:
| WindowEndTime | Onderwerp | Count |
|---|---|---|
| 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 |
Momentopnamevenster
Momentopnamen van Windows-groepgebeurtenissen die dezelfde tijdstempel hebben. In tegenstelling tot andere venstertypen, waarvoor een specifieke vensterfunctie (zoals SessionWindow() isvereist, kunt u een momentopnamevenster toepassen door System.Timestamp() toe te voegen aan de GROUP BY-component.

Met de volgende invoergegevens (zie hierboven):
| Stempel | CreatedAt | Onderwerp |
|---|---|---|
| 1 | 2021-10-26T10:15:04 | Streaming |
| 2 | 2021-10-26T10:15:04 | Streaming |
| 3 | 2021-10-26T10:15:04 | Streaming |
| ... | ... | ... |
De volgende query:
SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Retournt:
| WindowEndTime | Onderwerp | Count |
|---|---|---|
| 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 |