MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Finden Sie Lücken in riesigen Event-Streams?

Sie können dies mit dem lag() Fensterfunktion über eine Partition durch die stream_id, die nach dem Zeitstempel geordnet ist. Die Verzögerung() Funktion gibt Ihnen Zugriff auf vorherige Zeilen in der Partition; ohne Verzögerungswert ist es die vorherige Zeile. Wenn also die Partition auf stream_id nach Zeit geordnet ist, dann ist die vorherige Zeile das vorherige Ereignis für diese 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");