Condividi tramite


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.