MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trovare lacune in enormi flussi di eventi?

Puoi farlo con lag() funzione della finestra su una partizione dallo stream_id che è ordinato dal timestamp. Il lag() la funzione ti dà accesso alle righe precedenti nella partizione; senza un valore di ritardo, è la riga precedente. Quindi, se la partizione su stream_id è ordinata in base al tempo, la riga precedente è l'evento precedente per quello stream_id.

SELECT stream_id, lag(id) OVER pair AS start_id, id AS end_id,
       ("timestamp" - lag("timestamp") OVER pair) AS diff
FROM my_table
WHERE diff > interval '2 minutes'
WINDOW pair AS (PARTITION BY stream_id ORDER BY "timestamp");