Shape events (transforms)
The wizard's Transform step decides what each event looks like. Debezium Server chains single message transforms (SMTs); BeziSync offers them by goal and puts each step where it works:
| Stage | Steps | Notes |
|---|---|---|
| Value formats | Decimals as exact bytes (default), a number or exact text; timestamps as epoch numbers (default) or ISO-8601 text; binary as base64 or hex | Connector options. ISO text exists for PostgreSQL and MySQL only; CockroachDB and Vitess send decimals as text only; MongoDB and Spanner have none |
| Keep events | Keep only some operations (insert, update, delete, snapshot) and/or rows matching rules on columns (is, is one of, >, is empty, …), for all or some tables |
Runs on the full change event, so deletes are judged on the row before. PostgreSQL sends only the key of a deleted row unless the table has REPLICA IDENTITY FULL. Dropped events are gone for that pipeline; re-snapshot to bring rows back. MongoDB can filter on operations only |
| Event shape | The row after the change (with deletes kept as __deleted = true, as tombstones, or dropped, and optional metadata fields such as __op) or the full change envelope |
|
| Field changes | Rename fields, add a field (fixed text or the pipeline's name), flatten nested fields, custom transforms (Experts, policy) | Order matters within this stage; they need the row shape. The message key keeps column names |
| Message key | Key columns per table, e.g. for tables without a primary key | PostgreSQL, MySQL, Oracle, CockroachDB and Vitess. A key column the table lacks is ignored by Debezium |
Fields are picked from the discovered columns; only new names and rule values are typed, and
anything with ${…} is refused (Debezium Server would read it as a variable, for example a
secret). The preview builds a sample row from the table's columns (no data is read) and shows
the event after every step for an insert, update, delete or snapshot, with its key and
destination. Custom classes and filter scripts cannot be previewed and show as Unknown.
At deploy, preflight checks every step against the tables: a field added or renamed onto one the
event already has blocks the deploy (Debezium would stop with "field name duplication"); steps
on missing, excluded or masked columns, rules that can never match a column's type, missing key
columns and custom classes Debezium 3.7 does not ship are warnings. Review (and the approval
request) lists what changes for consumers: Breaking, Key change or Additive. After a deploy,
the Events tab says whether real events match the preview, and when a schema change breaks a step
the pipeline's Overview shows it with a Fix link and the Transform needs attention alert
fires. Every step is in the spec (transforms, values, keys), so YAML, templates, promote and
rollback carry it; debezium.transforms* cannot be set as advanced properties.