Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Boundedness

Does the input end? A file does. A Kafka topic does not. The same SQL means different things over each, so Streamform records the answer on every node of the plan and refuses SQL whose meaning depends on an ending that never comes.

Where it comes from

Boundedness is derived from the source’s connector, never guessed from the SQL:

ConnectorBoundedness
kafkaUnbounded: the stream never ends
fileBounded: the input is finite

Every operator downstream carries its input’s boundedness forward. explain shows it on each node as boundedness=Unbounded or boundedness=Bounded.

What it changes

A global ORDER BY needs the whole input to produce a final ordering. Over a bounded file that is a sort; over an unbounded topic it can never finish, so Streamform refuses it at check:

error: could not compile model `sorted`: model `sorted`: ORDER BY cannot produce a final
       ordering over an unbounded input; remove it, or sort downstream of a bounded materialization

The same model over a file source is accepted. This is the first and simplest of the semantics a SQL statement alone cannot express, and it is why sources are declared rather than inferred.

Later

Windows, watermarks, and event time (roadmap phases 7 and 8) are the next set of meanings that depend on time and on the input never ending. They arrive as first-class plan properties in the same way.