Skip to content

Event-time sort

Status: Native — ORDER BY on a single leading ascending rowtime; a secondary order key is the one gap.

This is Flink's temporal Sort: a full re-ordering of the stream by rowtime, needed because arbitrary-lateness elements can only be placed once the watermark has passed them, so the operator must hold and globally order a buffer rather than emit in arrival order.

The admitted shape is exactly Flink's own: the leading order key must be an ascending rowtime. A descending or non-time leading key isn't a fallback at all — it's a non-temporal Sort, which Flink itself rejects in streaming, so declining it here is parity, not a gap.

Gap

Any secondary order key beyond that leading ascending rowtime falls back.

State layout

Because a full time order can't be partitioned by any real key, the buffer is raw keyed state addressed under Flink's own one canonical empty key. That makes it checkpointable and restorable exactly as Flink restores its own temporal sort, but it deliberately cannot shard across subtasks — the same singleton limitation Flink's implementation has. See #22 for that constraint.