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

  1. Check the 'Caused by' stack trace for the underlying transform error
  2. Validate the transform config: for the SQL transform run the query against the upstream schema; for FieldMapper verify field mappings exist
  3. Print/inspect the upstream catalog table schema and align transform output with it
  4. 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

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


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)