Unbounded Dataset
Input with no known end, which removes the option of waiting for completeness and forces every aggregate to be provisional.
Batch processing rests on an assumption that is easy to miss because it is never stated: the input is complete. The job reads a finished dataset, computes, and emits an answer that is correct and final.
Streaming removes the assumption. There is no last record, so there is no moment at which an aggregate is complete. Every answer is "correct as of what has arrived so far", and something later may change it.
Everything difficult about stream processing follows from this. Windowing exists because you must impose artificial boundaries on data that has none. Watermarks exist because you must decide when a window is complete enough to emit despite knowing more may arrive. Late data handling exists because that decision is sometimes wrong. Exactly-once semantics are hard because there is no final reconciliation pass to fix duplicates.
The design consequence is that consumers of a streaming result must tolerate revision. A downstream system that treats the first emission as final will disagree with the stream, and the disagreement will be blamed on the pipeline.