System.Timestamp() (Stream Analytics)
Aan elke gebeurtenis in elke fase van de query in Azure Stream Analytics is een tijdstempel gekoppeld. System.Timestamp() is een systeemeigenschap die kan worden gebruikt om de tijdstempel van de gebeurtenis op te halen.
Hieronder wordt beschreven hoe Azure Stream Analytics tijdstempels toewijst aan gebeurtenissen.
Tijdstempel van invoerevenementen
Tijdstempel van de invoer-gebeurtenis kan worden gedefinieerd op basis van de kolomwaarde (of een expressie) die is opgegeven in de component TIMESTAMP BY :
SELECT System.Timestamp() t
FROM input
TIMESTAMP BY MyTimeField
Als er geen TIMESTAMP BY-component is opgegeven voor een bepaalde invoer, wordt de aankomsttijd van de gebeurtenis gebruikt als een tijdstempel. De enqueued-tijd van de gebeurtenis wordt bijvoorbeeld gebruikt in het geval van Event Hub-invoer.
Tijdstempel van resulterende gebeurtenis
Wanneer berekeningen worden uitgevoerd, is de tijdstempel van de resulterende gebeurtenis het vroegste logische tijdstip waarop dit resultaat kan worden bepaald.
Laten we eens kijken hoe de basisquerybewerkingen in Azure Stream Analytics (filters, projecties, aggregaties en joins) de tijdstempels voor het resultaat genereren.
Projectie
SELECT
Prop1,
Prop2,
Prop3 - Prop4 / 12,
System.Timestamp() t
FROM input
Projecties veranderen de tijdstempel van de gebeurtenis niet, de tijdstempel van het resultaat is hetzelfde als de tijdstempel van de invoer.
Filter
SELECT *
FROM input
WHERE prop1 > prop2
Filters wijzigen de tijdstempel van de gebeurtenis niet. De tijdstempel van het resultaat is hetzelfde als de tijdstempel van de invoer.
GROUP BY in tijdvenster
SELECT
userId,
AVG(prop1),
SUM(prop2),
System.Timestamp() t
FROM input
GROUP BY TumblingWindow(minute, 1), userId
Het tijdstempel van het resultaat van de aggregatie is het einde van het tijdvenster waarmee dit resultaat overeenkomt. Raadpleeg windowing (Azure Stream Analytics) artikelen waarin verschillende venstertypen in Azure Stream Analytics worden beschreven.
INNER JOIN
SELECT
System.Timestamp()
FROM input1
JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10
Een inner join produceert resultaten die overeenkomen met overeenkomende paren van gebeurtenissen uit input1 en input2.
De gebeurtenis die de overeenkomst van gebeurtenis e1 uit input1 en e2 van invoer2 vertegenwoordigt, wordt voorzien van de laatste tijdstempels van e1 en e2.
LEFT OUTER JOIN
SELECT
System.Timestamp()
FROM input1
LEFT JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN -2 AND 10
Een left-outer join produceert resultaten van twee typen. Sommige komen overeen met een overeenkomend paar gebeurtenissen uit input1 en input2; andere komen overeen met alleen een gebeurtenis uit input1 en geven aan dat er geen overeenkomende gebeurtenis uit input2 is gevonden.
De gebeurtenissen die een overeenkomst vertegenwoordigen (heeft zowel invoer1 als invoer2) worden tijdstempels met het laatste van de tijdstempels van de overeenkomende invoer (zoals in het geval van de INNER JOIN hierboven).
De gebeurtenissen die niet-overeenkomsten vertegenwoordigen (input2 is NULL) worden voorzien van een tijdstempel op basis van het laatste logische tijdstip waarop een overeenkomende invoer2-gebeurtenis kan hebben plaatsgevonden. In het bovenstaande voorbeeld is dit bijvoorbeeld het tijdstempel van invoer1 + 10 minuten.