Finestra sessione (Analisi di flusso di Azure)

Eventi del gruppo di finestre di sessione che arrivano in momenti simili, filtrando periodi di tempo in cui non sono presenti dati. La funzione finestra sessione include tre parametri principali: timeout, durata massima e chiave di partizionamento (facoltativo).

Il diagramma seguente illustra un flusso con una serie di eventi e come vengono mappati in finestre di sessione di 5 minuti e durata massima di 10 minuti.

Finestra della sessione di Analisi di flusso

Una finestra della sessione inizia quando si verifica il primo evento. Se si verifica un altro evento entro il timeout specificato dall'ultimo evento acquisito, la finestra si estende per includere il nuovo evento. In caso contrario, se non si verificano eventi entro il timeout, la finestra viene chiusa al timeout.

Se continuano a verificarsi eventi entro il timeout specificato, la finestra della sessione continuerà a estendersi fino al raggiungimento della durata massima. Si noti che gli intervalli di controllo della durata massima sono impostati come le stesse dimensioni della durata massima specificata. Ad esempio, se la durata massima è 10, i controlli su se la finestra supera la durata massima verrà eseguita in t = 0, 10, 20, 30 e così via. Ciò significa che la durata effettiva di una finestra di sessione potrebbe quindi essere fino a due volte maxDuration.

Pertanto, la finestra della sessione termina in modo matematico se la condizione seguente è soddisfatta:

condizioni diFinestra di fine della sessione

Quando viene fornita una chiave di partizione, gli eventi vengono raggruppati tramite la chiave e la finestra della sessione viene applicata indipendentemente a ogni gruppo. Questo è utile per i casi in cui sono necessarie finestre di sessione diverse per utenti o dispositivi diversi.

Sintassi

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

Nota

La finestra sessione può essere usata nei due modi precedenti.

Argomenti

timeunit Unità di tempo per le finestre. La tabella seguente contiene tutti gli argomenti validi per timeunit.

Timeunit Abbreviazioni
day dd, d
hour hh
minute mi, n
second ss, s
millisecondo ms
microsecondo mcs

timeoutsize

Intero grande che descrive le dimensioni del gap della finestra della sessione. I dati che si verificano all'interno delle dimensioni del gap vengono raggruppati insieme nella stessa finestra.

maxdurationsize

Se la dimensione totale della finestra supera il valore maxDurationSize specificato in un punto di controllo, la finestra viene chiusa e viene aperta una nuova finestra nello stesso punto. Attualmente, le dimensioni dell'intervallo di controllo sono uguali a maxDurationSize.

partitionkey

Parametro facoltativo che specifica la chiave su cui funziona la finestra della sessione. Se specificato, la finestra raggruppa solo gli eventi della stessa chiave.

Esempio

Si supponga di avere i dati json seguenti:

[
  // time: the timestamp when the user clicks on the link
  // user_id: the id of the user
  // url: the url the user clicked on
  {
    "time": "2017-01-26T00:00:00.0000000z",
    "user_id": 0,
    "url": "www.example.com/a.html"
  },
  {
    "time": "2017-01-26T00:00:20.0000000z",
    "user_id": 0,
    "url": "www.example.com/b.html"
  },
  {
    "time": "2017-01-26T00:00:55.0000000z",
    "user_id": 1,
    "url": "www.example.com/c.html"
  },
  // ...
]

Per misurare la durata di ogni sessione utente, è possibile usare la query seguente:

CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
    user_id,
    MIN(time) AS window_start,
    System.Timestamp() AS window_end,
    DATEDIFF(s, MIN(time), System.Timestamp()) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)

La query precedente crea una finestra di sessione con un timeout di 2 minuti, una durata massima di 60 minuti e una chiave di partizionamento di user_id. Ciò significa che le finestre di sessione indipendenti verranno create per ogni user_id. Per ogni finestra, questa query genererà l'output contenente la user_id, l'ora di inizio della finestra (window_start), la fine della finestra (window_end) e la durata totale della sessione utente (duration_in_seconds).