Delen via


Momentopnamevenster

✅ Azure Stream Analytics ✅ Fabric Eventstream

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.

In het volgende diagram ziet u een stroom met een reeks gebeurtenissen en hoe deze worden toegewezen aan momentopnamevensters.

Diagram van momentopnamevenster

System.Timestamp() kan in de GROUP BY-component worden beschouwd als een sleutelkolom of een definitie van een momentopnamevenster omdat deze gebeurtenissen in een venster groeperen op basis van de gelijkheid van tijdstempels. In combinatie met een andere vensterfunctie wordt System.Timestamp() behandeld als een sleutel en niet als een vensterdefinitie. System.Timestamp() produceert geen fout bij gebruik met andere vensterfuncties, in tegenstelling tot wanneer meerdere vensterfuncties worden gebruikt in de GROUP BY-component. Het gebruik van zowel System.Timestamp() als een vensterfunctie in de GROUP BY kan handig zijn om de resultaten te batcheren.

Elke expressie die System.Timestamp() bevat, wordt niet beschouwd als een venster. Mislukt bijvoorbeeld GROUP BY DATEPART(minute, System.Timestamp()) met de fout 'een venster moet worden opgegeven'.

Syntaxis

System.Timestamp()

Voorbeelden

Basisvoorbeeld

In het volgende voorbeeld wordt het aantal tweets geretourneerd met hetzelfde onderwerptype dat precies op hetzelfde moment voorkomt:

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

Voorbeeld van momentopname van tumblingvenster

Een veelvoorkomend gebruik voor momentopnamevensters is het aggregeren van gebeurtenissen nadat deze zijn gegroepeerd op één tijdstempel via een voorgaande vensterfunctie, zoals hieronder TumblingWindow.

In het volgende voorbeeld wordt het aantal tweets met hetzelfde onderwerptype geretourneerd door dezelfde gebruiker binnen 30 minuten:

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

Als u het aantal gebruikers en het totale aantal tweets per onderwerp binnen hetzelfde interval wilt vinden, kunt u het resultaat van de vorige query gebruiken. Vanwege de resultaten van het tumblingvenster zijn allemaal tijdstempels uitgelijnd op de grens van 30 minuten, kunt u een momentopnamevenster gebruiken om gebeurtenissen op elke grens te retourneren, omdat ze allemaal dezelfde tijdstempelwaarde hebben.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

De vorige query heeft het aantal gebruikers en het totale aantal tweets per onderwerp geretourneerd binnen hetzelfde interval van 30 minuten. Als u dezelfde resultaten eenmaal per 2 uur wilt ophalen, voegt u een tumblingvenster van 2 uur toe aan de GROUP BY-component.

De volgende query retourneert resultaten van alle vier intervallen van 30 minuten aan het einde van elk 2 uurvenster.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

Voorbeeld van statistische vensters

U kunt System.Timestamp() gebruiken als een van de vensters in de samengestelde Windows()-constructie.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())