History
Expressions in parameters or output assignments of operator invocations can refer directly to tuples received in the past.
History access maintains a list of tuples, which can be subscripted by using the input port name. For example:
composite Main {
graph stream<int32 id, int32 diff, rstring name> In = Beacon() {}
stream<int32 id, int32 diff, rstring name> Out = Functor(In) {
param filter : name != In[1].name;
output Out : diff = id - In[1].id;
}
}
The expression In[1].name refers to a historical tuple on port In, one tuple in the past, and extracts the name attribute from it. The current tuple is at index 0, so a bare stream name like In is synonymous with In[0]. For example, the filter parameter might equivalently be written as In[0].name != In[1].name. The subscript must be a compile-time constant. History access does not support slicing.
The tuples in the history list correspond to the last n tuples received on the stream. Primitive operator parameters like partitionBy do not affect the history.