Skip to main content
cesteralDocs
FAQContact

Transform Node

Reshape records with map, aggregate, deduplicate, sort, and limit operations

Last updated 24 Jun 2026

The Transform node is the general-purpose data-reshaping step. It runs one of five operations on the incoming records: map (select, rename, compute, coerce types), aggregate (group and summarize), deduplicate, sort, or limit.

When to Use

Use Transform to normalize field names, coerce types, compute derived fields, roll rows up into group summaries, remove duplicates, reorder, or cap the row count before passing data downstream.

Configuration

The available fields depend on the selected operation.

FieldTypeOperationDescription
operationmap | aggregate | deduplicate | sort | limitallThe transform to run (default: map)
mappingsarraymapField operations, each { useExpression, source, expression, target, type }
includeUnmappedbooleanmapKeep fields not listed in mappings (default: false)
onErrorskip | fail | nullmapWhat to do when a value fails coercion (default: skip)
groupByarrayaggregateFields to group by, each { field }
aggregatesarrayaggregateAggregations, each { function, source, as }
keysarraydeduplicateFields that define a duplicate, each { field }
strategyfirst | lastdeduplicateWhich duplicate row to keep (default: first)
caseSensitivebooleandeduplicateTreat key values case-sensitively (default: true)
sortByarraysortSort keys, each { field, direction, nulls }
limitnumberlimitMaximum rows to keep (default: 100)
offsetnumberlimitRows to skip before taking limit (default: 0)

Map Mappings

Each mapping selects a source field and writes it to target. Set useExpression to compute the value with an expression instead of copying a field. Aggregation functions are count, sum, avg, min, max, count_distinct, first, and last.

Inline Expressions (map)

Map expressions interpolate field values with ${fieldName} and support safe arithmetic:

${first_name} ${last_name}     → concatenation
${revenue} * 0.1               → 10% of revenue

Example

Normalize a CRM export, keeping only mapped fields:

operation: map
mappings:
  - source: "Email Address"
    target: email
    type: string
  - source: "Annual Revenue"
    target: revenue
    type: number
  - useExpression: true
    expression: "${First Name} ${Last Name}"
    target: full_name
includeUnmapped: false
onError: skip

Notes

  • With includeUnmapped: false, only fields with an explicit mapping appear in the output.
  • type coercion options are auto, string, number, boolean, and date. On a coercion failure, onError decides whether to skip the row, fail the run, or substitute null.
  • In sort, each key chooses a direction (asc/desc) and null placement (first/last).
  • In aggregate, the output is one row per group, with one column per entry in aggregates.

Related articles

Still stuck? Browse the FAQ or contact us.