GATHER [stream_identifier_1.]field_identifier_1ASoutput_field_identifier_1[,...] FROMstream_identifier_1,stream_identifier_2[,...] USINGfield_identifier_gather[TIMEOUTvalueONfield_identifier_timeout] [ERROR INTOstream_identifier];
-
stream_identifier_n -
The unique identifier (name) of a stream.
-
field_identifier_n -
A tuple field to be included in the output stream.
-
output_field_identifier_n -
The name for a tuple field that is included in the output stream.
-
field_identifier_gather -
A tuple field present in all incoming streams that will be used as the gather key field.
-
value -
The timeout criteria: the maximum differential between the specified field value in the unmatched tuples and the value in the most recently emitted tuple.
-
field_identifier_timeout -
The tuple field monitored for timeout.
- ... in GATHER clause
-
Additional output field entries of the form: [
stream_identifier_n.]field_identifier_nASoutput_field_identifier_n. - ... in FROM clause
-
Additional input stream entries of the form:
stream_identifier_n.
You can append an ERROR INTO clause just before the closing semicolon. The StreamSQL ERROR INTO clause is analogous to the Enable Error Output Port checkbox for operators and adapters in EventFlow applications.
Use ERROR INTO with the name of a stream, which must already exist. This sets up an Error Port for this operator, which is much like a local catch mechanism for errors from this operator.
See Using Error Ports and Error Streams for a discussion of StreamBase error handling mechanisms.
GATHER combines its Input Streams by identifying matching tuples (1 to 1) across all the Input Streams, and produces one output tuple with values constructed from any of its input tuples. By default, GATHER buffers input tuples for each value of the key field until the value has been seen on each of the input streams; only then is the output tuple released. Matching tuples can arrive in any order (input need not be synchronized), and tuples are emitted in the order that they are fully matched.
The target list following the GATHER keyword can include field values from any of the matching tuples. The streams being gathered are listed after the FROM keyword; USING identifies the key field.
Sometimes it is not desirable to wait until all of the input streams have a
matching tuple; you want to generate an output stream from the input tuples
that are currently buffered. To support this requirement, GATHER includes
an optional TIMEOUT clause that will collect the available input tuples
into an output tuple on certain conditions. The ON keyword identifies the
tuple field that timeout monitors; val sets
the timeout criteria, which is a maximum differential between the specified
field value in the unmatched tuples and the value in the most recently
emitted tuple. For example, TIMEOUT 200 ON int_field specifies that once each stream has received a
tuple with an int_field value that is 200
higher than the int_field value for unmatched
tuples, the unmatched tuples will be emitted; null values will be inserted
into target list values that cannot be populated from the buffered tuples.
GATHER generates a stream and can be used anywhere a stream expression is acceptable. As an alternative, the output could be captured in a stream, as illustrated in the following code fragments.
CREATE [OUTPUT] STREAM stream_identifier; GATHER ... INTO stream_identifier;
CREATE [OUTPUT] STREAM stream_identifier AS
GATHER ...;
Or, for an OUTPUT STREAM
GATHER ... => CREATE OUTPUT STREAM stream_identifier;
