Delen via


Momentopnamevenster (Azure Stream Analytics)

Momentopnamevensters groeperen gebeurtenissen met dezelfde tijdstempel. In tegenstelling tot andere venstertypen, waarvoor een specifieke vensterfunctie is vereist (zoals SessionWindow(), 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 gebeurtenissen in een venster worden gegroepeerd 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 window-functie in GROUP BY kan handig zijn om de resultaten in batches te verwerken.

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

Syntaxis

System.Timestamp()

Voorbeelden

Basisvoorbeeld

In het volgende voorbeeld wordt het aantal tweets met hetzelfde onderwerptype geretourneerd 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 ze zijn gegroepeerd op één tijdstempel via een voorgaande vensterfunctie, zoals TumblingWindow hieronder.

Het volgende voorbeeld retourneert het aantal tweets met hetzelfde onderwerptype door dezelfde gebruiker binnen intervallen van 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. Omdat de tumblingvensterresultaten allemaal tijdstempels hebben die zijn uitgelijnd op de grens van 30 minuten, kunt u een momentopnamevenster gebruiken om gebeurtenissen bij 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 retourneerde het aantal gebruikers en het totale aantal tweets per onderwerp binnen hetzelfde interval van 30 minuten. Als u eenmaal per 2 uur dezelfde resultaten wilt krijgen, 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 venster van 2 uur.

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

Voorbeeld van aggregatievensters

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