SeaTunnel already has a generated transform catalog and a page for transform common options. What is still missing is a system-level explanation of how transforms fit into the pipeline, what contracts they share, and how contributors should think about them.
This page fills that gap.
Transforms sit between source and sink and operate on SeaTunnel's own row and table model:
Source -> Transform Chain -> Sink
In practice, the transform block is optional, but it becomes the main place to express pipeline logic when:
SeaTunnel uses plugin_output to register an intermediate dataset and plugin_input to consume one or more previously produced datasets. This lets transforms form a logical graph instead of a single rigid linear chain.
At a system level, transforms do more than field-level mapping. They are responsible for:
This is why the transform layer matters in both batch pipelines and CDC pipelines.
The transform system is built around a small set of contracts:
SeaTunnelTransform: the base runtime contractSeaTunnelMapTransform: one-input to one-output row transformationSeaTunnelFlatMapTransform: one-input to zero-or-more output rowsTableTransform: wrapper that creates a runtime transform instanceTableTransformFactory: SPI entry point used for discovery and creationTableTransformFactoryContext: factory context carrying ReadonlyConfig, class loader, and upstream CatalogTable metadataThis contract split matters because SeaTunnel wants transform plugins to stay:
Related docs:
At a high level, transform preparation works like this:
TableTransformFactory through the factory and SPI mechanismCatalogTable metadata is passed into the transform factory contextThe key design choice is that the transform plugin works on SeaTunnel contracts first. Translation to Flink, Spark, or native Zeta execution happens later.
The current transform ecosystem is broad, but most plugins fall into a few categories:
These plugins are used when the main task is to align source fields with downstream schema expectations.
These plugins decide which records or tables continue through the pipeline.
These plugins are useful when the transformation logic is easier to express declaratively than with custom code.
These plugins are especially important in CDC pipelines because they help preserve or reshape change semantics for downstream systems.
These plugins are used when row processing needs external models, richer computation, or custom business logic.
When adding or reviewing a transform plugin, check these points first:
Option and OptionRule contractsIn general, transforms should own row and schema shaping logic, not external commit semantics or engine runtime behavior.
Not really. In many jobs the transform layer is where the actual business mapping, schema alignment, and CDC adaptation happens.
Also not true. Many transforms need to preserve or reshape schema and metadata, especially in multi-table and change-event scenarios.
Portability is a design goal, not a free side effect. Contributors still need to avoid engine-specific assumptions and follow SeaTunnel's API contracts.