How it works
A mapper configuration is a list of column rules. Each rule declares:- the output column name (
key) - where the value comes from — a path into the message, a static string, or a computed expression
- optional transformations applied to the extracted value (cast, hash, encrypt, concatenate)
source column.
Column configuration reference
| Field | Type | Required | Description |
|---|---|---|---|
key | string | Yes | Output column name in the target table |
path | string | No | Pipe-separated JSON path to the source value |
static | string | No | Hardcoded value (used when there is no source path) |
cast | string | No | Type conversion: string, int, float, bool, date, datetime, time |
cast_format | string | No | Format string for date, datetime, or time casts (e.g. %Y-%m-%d) |
primary_key | boolean | No | Marks this column as part of the primary key (required for JDBC targets) |
nullable | boolean | No | Whether null is accepted. Defaults to true. If false, a missing value produces an error row |
concatenate_fields | array | No | Combine multiple paths and static strings into a single value |
hash_method | string | No | Hash the value before writing: md5, sha256, sha512 |
encrypt_method | string | No | Encrypt the value: aes-256-gcm |
encrypt_key | string | No | Encryption passphrase (required when encrypt_method is set) |
Path syntax
Paths navigate the JSON structure of a message using| as separator.
Nested objects
Static values
Whenpath is empty and static is set, that literal string is written to every output row.
Wildcards
Use* in a path to expand an array. Each element of the array produces a separate output row.
Basic expansion
Nested expansion
Wildcards can appear at multiple levels. The mapper walks through every combination and produces one row per deepest element.Parallel lists (zip semantics)
When two columns share the same root path up to the first*, the mapper treats them as aligned lists and zips them by index — no cartesian product.
Wildcard on a non-array field
If the path segment marked* points to an object (not an array), the wildcard is silently skipped and the mapper continues navigating the object normally.
Deduplication
When wildcard expansion produces identical rows, duplicates are automatically removed.Transformations
Transformations are applied in this order: concatenate → hash → encrypt → cast.Type casting
"true", "false", "1", "0", "yes", "no" (case-insensitive) in addition to native booleans.
For date / datetime / time, use a cast_format string in strftime format. When omitted, ISO 8601 strings are parsed automatically.
Concatenation
Combine multiple source fields and/or static separators into a single output column.concatenate_fields has a path and/or a static value. They are appended in order.
Hashing
Hash a value before it lands in the target — useful for pseudonymisation.md5, sha256, sha512. A null input produces a null output (no error).
Encryption
Encrypt a value with AES-256-GCM. A unique random nonce is generated per call, so the same input produces a different ciphertext each time.Null handling
By default, every column is nullable: if the path does not exist in the message the output value isnull and no error is raised.
Set "nullable": false to treat a missing field as an error:
"error" key to the output row describing the failure.
Primary keys
Targets that write to a database table (PostgreSQL, Snowflake, Oracle, …) require at least one column marked"primary_key": true. This is what the connector uses to perform upserts.
Testing and debugging
In the UI
The subscription builder includes a live preview panel. Paste a raw CDC message and the panel shows the exact rows the mapper will produce before you save the subscription.Via the API
You can call the mapper directly without any pipeline or subscription:Reading error rows
When a transformation fails (bad cast, non-nullable field missing, etc.) the mapper does not drop the row — it includes it with an"error" key:
Common mistakes
| Symptom | Likely cause |
|---|---|
| Output has fewer rows than expected | A wildcard path points to an object instead of an array — check the shape of your message |
| Duplicate rows in output | Multiple wildcards at the same level produce a cartesian product instead of zipping — verify that both paths share the same root prefix |
null where a value was expected | The path separator is wrong — use | not . to separate path segments |
| Cast failure | The source value cannot be converted (e.g. "N/A" cast to int) — add "nullable": true or fix the source value |
| JDBC connector rejects the subscription | No column has "primary_key": true — required for upsert-capable targets |