ChronusQLTime and state

Aggregate windows

Select the temporal boundary that matches the analytical question: fixed, rolling, overlapping, or inactivity-delimited.

Time and state

10 min read

Language reference

Four ways to bound state

Execution sketchThe same event stream, four window semantics
fixedTumbling
rollingSliding
overlappingHopping
activitySession
Window choice controls membership and emission. Grouping keys partition every window independently.
WindowMembershipBest for
TumblingNon-overlapping fixed intervalsPeriodic summaries and buckets
SlidingA continuously moving durationRolling indicators
HoppingFixed intervals emitted at a smaller hopOverlapping periodic analysis
SessionActivity separated by an inactivity timeoutBursts, visits, and operational sessions

Fixed and overlapping windows

TumblingChronusQL
GROUP BY driver,
         TumblingWindow(Duration(second, 30))
SlidingChronusQL
GROUP BY driver,
         SlidingWindow(Duration(second, 30))
HoppingChronusQL
GROUP BY driver,
         HoppingWindow(Duration(second, 30), Hop(second, 5))

An optional Offset(unit, value) aligns supported aggregate windows away from the default boundary. Hopping windows use Hop(unit, value) for the advance interval.

Session windows

Independent sessions per driverChronusQL
SELECT driver,
       Window.EndTime AS session_end,
       COUNT(*) AS event_count
INTO output
FROM laps TIMESTAMP BY ts
GROUP BY driver,
         SessionWindow(Duration(minute, 2, 60))
Close after two minutes of inactivity, with a sixty-minute maximum session duration.
  • The first size is the inactivity timeout.
  • The second size is the maximum session duration checkpoint.
  • Normal grouping keys partition sessions independently.
  • Session results are timestamped at the logical session end.