The data-transform-api
provides a common API for data transformations.
This API assumes that a data record is represented as a Map<String, Object>
. While values can be primitive, container (e.g. Map
, Collection
) or custom types, some systems that rely on transformed data may only support subset of objects (i.e. Concourse
does not support Map
values).
A Transformer
is a functon that takes in a Map<String, Object>
and returns a Map<String, Object>
which contains transformations. If the Transformer
doesn't modify the input data, it is customary for the function to return null
.
The Transformers
class contains some useful transformers that are pre-defined.
For maximum reusability, it is best to think of each Transformer
as narrow function that only modifies one data characteristic. In doing so, it often becomes necessary to chain multiple transformers to fully transform a data set to its intended state. The Transformers#compose
and Transformers#composeForEach
factories will return a special CompositeTransformer
that applies multiple transformers across a data set successively.
The Transformers#forEach
and Transformers#composeForEach
factories provide meta transformers that will apply the transformation to each item within a value Collection. This should be used in the case of a datastore like Concourse
that implicitly treats Collection values as containers of multiple primitive values.