Skip to content

Window join

Status: Native. Both sides carry the same window-attached windowing — TUMBLE, HOP, or CUMULATE — and match within the shared window rather than an explicit BETWEEN bound. Like the interval join, it is not changelog-aware: both inputs must be insert-only, and a retracting/updating input falls it back per the insert-only guard.

Admission

The same key/type/residual conditions as the interval join — a supported-type equi-key, null-dropping keys for a non-INNER join, a non-equi residual the native expression engine can express, and all four join types (INNER/LEFT/RIGHT/FULL) native — plus one condition specific to this shape: both sides must carry the same time semantics, either both event-time windows or both proctime windows. An event-time/proctime mismatch between the two sides' windowing isn't native.

An event-time window join closes each window on the watermark, like the windowed aggregate; a proctime window join closes it on a processing-time timer instead.

  • the join type isn't INNER, LEFT, RIGHT, or FULL;
  • there's no equi key;
  • the key columns aren't null-dropping for a non-INNER join;
  • the equi-key type is outside the supported set;
  • the non-equi residual isn't expressible by the native expression engine;
  • the two sides' windowing doesn't share time semantics (one event-time, one proctime).