System.Timestamp() (Analisi di flusso)
A ogni fase della query in Analisi di flusso di Azure a ogni evento è associato un timestamp. System.Timestamp() è una proprietà di sistema che può essere utilizzata per recuperare il timestamp dell'evento.
Di seguito viene descritto come Analisi di flusso di Azure assegna timestamp agli eventi.
Timestamp degli eventi di input
Il timestamp dell'evento di input può essere definito dal valore di colonna (o da un'espressione) specificato nella clausola TIMESTAMP BY :
SELECT System.Timestamp() t
FROM input
TIMESTAMP BY MyTimeField
Se non viene specificata una clausola TIMESTAMP BY per un determinato input, l'ora di arrivo dell'evento viene utilizzata come timestamp. Ad esempio, l'ora accodata dell'evento verrà usata in caso di input dell'hub eventi.
Timestamp dell'evento risultante
Quando vengono eseguiti calcoli, il timestamp dell'evento risultante è il momento logico meno recente in cui è possibile determinare questo risultato.
Si esamini ora come le operazioni di query di base in Analisi di flusso di Azure (filtri, proiezioni, aggregazioni e join) generano i timestamp per il risultato.
Proiezione
SELECT
Prop1,
Prop2,
Prop3 - Prop4 / 12,
System.Timestamp() t
FROM input
Le proiezioni non modificano il timestamp dell'evento, il timestamp del risultato corrisponde al timestamp dell'input.
Filter
SELECT *
FROM input
WHERE prop1 > prop2
I filtri non modificano il timestamp dell'evento. Il timestamp del risultato corrisponde al timestamp dell'input.
GROUP BY nell'intervallo di tempo
SELECT
userId,
AVG(prop1),
SUM(prop2),
System.Timestamp() t
FROM input
GROUP BY TumblingWindow(minute, 1), userId
Il timestamp del risultato dell'aggregazione è la fine dell'intervallo di tempo a cui corrisponde questo risultato. Vedere gli articoli Windowing (Analisi di flusso di Azure) che descrivono diversi tipi di finestra in Analisi di flusso di Azure.
INNER JOIN
SELECT
System.Timestamp()
FROM input1
JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10
Un inner join produce risultati che corrispondono a coppie di eventi corrispondenti da input1 e input2.
L'evento che rappresenta la corrispondenza dell'evento e1 da input1 ed e2 da input2 viene timestampato dall'ultimo timestamp di e1 ed e2.
LEFT OUTER JOIN
SELECT
System.Timestamp()
FROM input1
LEFT JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN -2 AND 10
Un left-outer join produce risultati di due tipi. Alcuni corrispondono a una coppia di eventi corrispondente da input1 e input2; altri corrispondono solo a un evento di input1 e indicano che non è stato trovato alcun evento corrispondente da input2.
Gli eventi che rappresentano una corrispondenza (con input1 e input2) vengono timestampati dall'ultimo timestamp degli input corrispondenti (come nel caso di INNER JOIN precedente).
Gli eventi che rappresentano corrispondenze (input2 è NULL) vengono timestampati dall'ora logica più recente in cui si è verificato un evento input2 corrispondente. Nell'esempio precedente, ad esempio, è il timestamp di input1 + 10 minuti.