Aggregate Operators and Expression Functions
Window aggregates (MIN, MAX, AVG, SUMC)
Aggregate operators operate on a stream with multiple fields — typically the output stream of the @(k,w) operator (a data window). They reduce all fields of the record to a single value.
Syntax
FROM stream.aggregator
where aggregator is one of:
| Keyword | Behavior |
|---|---|
min / MIN | minimum of all fields in the record |
max / MAX | maximum of all fields in the record |
avg / AVG | arithmetic mean of the record’s fields |
sumc / SUMC | sum of all fields in the record |
Keywords are accepted in both lowercase and uppercase.
Output interval
Aggregates do not change the stream’s rate — the output interval is the same as the source’s:
\[\Delta_{result} = \Delta_{stream}\]
Example: moving average
DECLARE val INTEGER STREAM src, 1 FILE 'data.txt'
-- a 5-element window shifted by 1
SELECT * STREAM win5 FROM src@(1,5)
-- average of the last 5 values
SELECT win5[0] STREAM ma5 FROM win5.avg
The ma5 stream contains, at every moment, the average of the five most recent src samples.
Example: signal filter (sumc)
An excerpt from the signal-filter implementation example:
SELECT signalRow[_] * filter[_] STREAM accRow FROM signalRow+filter
SELECT accRow[0] STREAM output FROM accRow.sumc
accRow.sumc sums all fields of the accRow record (products of signal samples and filter coefficients), producing the output of an FIR filter.
Example: MIN and MAX
DECLARE v INTEGER STREAM src, 0.1 FILE '/dev/urandom'
SELECT * STREAM win10 FROM src@(1,10)
SELECT win10[0] STREAM min10 FROM win10.min
SELECT win10[0] STREAM max10 FROM win10.max
NOTE: The functionality described here is covered by the tests:
simple_max,Pattern4, described in the appendix Integration Tests.
The to_string function
The to_string function converts a numeric expression to a text string of a given width. The result goes into a field of type STRING in the output stream.
Syntax
to_string(expression : width)
to_string(expression)
The width parameter (a natural number after the colon :) specifies the output field’s width in bytes. Omitting the parameter gives a default width of 32 bytes.
ℹ️ Info
The argument separator is a colon
:, not a comma,. A comma is the SELECT list separator — using a comma into_string(x, n)will cause a parse error.
Example
DECLARE v INTEGER STREAM src, 1 FILE 'data.txt'
SELECT to_string(src[0]:10) STREAM labels FROM src
The labels stream contains the values of src formatted as text in a 10-byte field.
Concatenation with a literal
The resulting string can be joined with a string literal using the + operator:
SELECT to_string(src[0]:8) + '_ok' STREAM tagged FROM src
Output field size: 8 (from to_string) + 3 (literal _ok) = 11 bytes.
Use cases
to_string is useful when exporting to systems that accept text data (Graphite, InfluxDB via xqry), or when creating event labels combined with DO DUMP output.
NOTE: The functionality described here is covered by the tests:
issue121_isnull,issue128_numeric_to_string,issue128_string_to_numeric, described in the appendix Integration Tests.