Jump to the Code block for a combined complete example.
A common way to process the results of a basic query is aggregation, where you compute a function over the entire results set.
The following examples will use the setup below to illustrate query aggregation with a stream UDF.
The record structure:
When a query executes, it produces a stream of results. That stream contains records that you can iterate using the client API. However, Aerospike provides the ability to process the stream of results using a Stream UDF. Stream UDFs allow a stream to be augmented with operations that process the data flowing through the stream.
This example uses the Stream UDF
count, from the
See Manage UDFs for information on registering the UDF.
-- Aggregation function to count records
local function one(rec)
local function add(a, b)
return a + b
return stream : map(one) : reduce(add);
count() is applied to the stream of results from a query, adding to the stream the operations to perform on the results:
map— Maps a value from the stream to another value. In this example, mapping is defined as the function
one(), which maps a record to the value 1.
reduce— Reduces the values from the stream into a single value. In this example, reduction is performed by adding two values from the stream, which happen to be 1s returned from the
The end result is a stream that contains a single value, the sum of 1 for each record in the result set.
Client UDF path
For client-side Stream UDF processing, you must point the client to the local location of the UDF module.
Execute the query
The following example will execute a secondary index query, using an index created on the
The returned result will be a count of all records with an
occurred value between