apache/seatunnel · error · TaskExecuteException
SeaTunnel transform task
Error message
SeaTunnel transform task: ${factoryIdentifier} execute error What it means
TransformExecuteProcessor.execute wraps each transform's dataset conversion in a try/catch and rethrows as TaskExecuteException with the message 'SeaTunnel transform task: <factoryIdentifier> execute error'. It identifies WHICH transform plugin failed; the actual cause (schema mismatch, UDF error, Spark analysis exception) is in the attached cause.
Solutions
- Check the 'Caused by' stack trace for the underlying transform error
- Validate the transform config: for the SQL transform run the query against the upstream schema; for FieldMapper verify field mappings exist
- Print/inspect the upstream catalog table schema and align transform output with it
- Ensure the transform plugin jar version matches the SeaTunnel version
Example fix
// before TransformSql = "SELECT unknow_column FROM dual" // after TransformSql = "SELECT existing_column FROM my_table"
Defensive patterns
Strategy: try-catch
Validate before calling
// Validate transform SQL/mappings against upstream schema before submit (dry-run static) // sh bin/seatunnel.sh --config job.conf -e local --dry-run static
Try / catch
try {
runSparkJob();
} catch (TaskExecuteException e) {
log.error("Transform failed: " + e.getMessage() + ", root:", e.getCause());
} Prevention
- Dry-run jobs to catch transform schema issues early
- Verify columns referenced by SQL/FieldMapper transforms exist upstream
- Keep transform plugin versions aligned with the SeaTunnel distribution
When it happens
Trigger: Any Exception thrown while a transform plugin (identified by its factoryIdentifier, e.g. 'SQL', 'FieldMapper', 'Filter') processes its input Dataset and produces catalog tables — such as SQL syntax errors in the sql transform, field name mismatches in FieldMapper, or incompatible input schemas.
Common situations: SQL transform referencing a column that does not exist in the upstream table; wrong case-sensitive table/column names; transform output schema conflicting with sink expectations; plugin jar version mismatch.
Related errors
- Run SeaTunnel on spark failed
- All candidate sink tables were skipped in Spark starter.
- All candidate sink tables were skipped in Spark starter.
- API-09
- Close ErrorHandler for transform stage failed
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/5c8f2cf1b05b00a7.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-core/seatunnel-spark-starter/seatunnel-spark-starter-common/src/main/java/org/apache/seatunnel/core/starter/spark/execution/TransformExecuteProcessor.java:162
new TableTransformFactoryContext(
dataset.getCatalogTables(),
ReadonlyConfig.fromConfig(pluginConfig),
classLoader);
ConfigValidator.of(context.getOptions()).validate(factory.optionRule());
SeaTunnelTransform transform = factory.createTransform(context).createTransform();
Dataset<Row> inputDataset = sparkTransform(transform, dataset);
registerInputTempView(pluginConfig, inputDataset);
String pluginOutputIdentifier =
ReadonlyConfig.fromConfig(pluginConfig).get(PLUGIN_OUTPUT);
outputTables.put(
pluginOutputIdentifier,
new DatasetTableInfo(
inputDataset,
transform.getProducedCatalogTables(),
pluginOutputIdentifier));
} catch (Exception e) {
throw new TaskExecuteException(
String.format(
"SeaTunnel transform task: %s execute error",
plugins.get(i).factoryIdentifier()),
e);
}
}
return new ArrayList<>(outputTables.values());
}
private Dataset<Row> sparkTransform(SeaTunnelTransform transform, DatasetTableInfo tableInfo) {
MultiTableManager inputManager =
new MultiTableManager(tableInfo.getCatalogTables().toArray(new CatalogTable[0]));
MultiTableManager outputManager =
new MultiTableManager(
(CatalogTable[])
transform.getProducedCatalogTables().toArray(new CatalogTable[0]));
Dataset<Row> stream = tableInfo.getDataset();
ExpressionEncoder<Row> encoder = RowEncoder.apply(outputManager.getTableSchema());View on GitHub (pinned to cf67b549a7)