apache/seatunnel · warning

Some sink tables were skipped in Spark starter.

Error message

Some sink tables were skipped in Spark starter.

What it means

This warning from the Spark starter's SinkExecuteProcessor.execute indicates that in a multi-table Spark job some sink tables failed and were skipped, but at least one sink was successfully created, so the job proceeds. A formatted per-table failure summary accompanies the message. If all tables had been skipped, a TaskExecuteException ('All candidate sink tables were skipped in Spark starter.') is thrown instead.

Source

Thrown at seatunnel-core/seatunnel-spark-starter/seatunnel-spark-2-starter/src/main/java/org/apache/seatunnel/core/starter/spark/execution/SinkExecuteProcessor.java:209

                            classLoader);
            createdAnySink = true;
            String applicationId =
                    sparkRuntimeEnvironment.getSparkSession().sparkContext().applicationId();
            CatalogTable[] catalogTables =
                    datasetTableInfo.getCatalogTables().toArray(new CatalogTable[0]);
            SparkSinkInjector.inject(
                            dataset.write(), sink, catalogTables, applicationId, parallelism)
                    .option("checkpointLocation", "/tmp")
                    .save();
        }
        if (!createdAnySink && !skippedTables.isEmpty()) {
            throw new TaskExecuteException(
                    MultiTableFailureHelper.formatFailedTableSummary(
                            "All candidate sink tables were skipped in Spark starter.",
                            skippedTables));
        }
        if (createdAnySink && !skippedTables.isEmpty()) {
            log.warn(
                    MultiTableFailureHelper.formatFailedTableSummary(
                            "Some sink tables were skipped in Spark starter.", skippedTables));
        }
        // the sink is the last stream
        return null;
    }

    public void handleSaveMode(SeaTunnelSink sink) {
        if (sink instanceof SupportSaveMode) {
            Optional<SaveModeHandler> saveModeHandler =
                    ((SupportSaveMode) sink).getSaveModeHandler();
            if (saveModeHandler.isPresent()) {
                try (SaveModeHandler handler = saveModeHandler.get()) {
                    handler.open();
                    new SaveModeExecuteWrapper(handler).execute();
                } catch (Exception e) {
                    throw new SeaTunnelRuntimeException(HANDLE_SAVE_MODE_FAILED, e);
                }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Read the failure summary in the log to identify the failing table path and root cause.
  2. Fix the failing sink's config/environment and rerun the job to backfill its data.
  3. Isolate problematic tables into separate jobs if partial writes are unacceptable.
Defensive patterns

Strategy: try-catch

Validate before calling

for (TablePath tp : sinkTablePaths) { checkSinkReachable(tp); }

Try / catch

try {
    job.run();
} catch (TaskExecuteException e) {
    // all sink tables skipped in Spark starter - halt and alert
    throw e;
}

Prevention

When it happens

Trigger: During execute(), creating/writing one sink fails (connection, auth, schema) and is recorded via logSkippedTable, while other tables' sinks initialize fine.

Common situations: Multi-table writes where one target cluster is unreachable or credentials differ; schema drift on one table; a sink plugin missing for one format.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/8b9053cc44421d8f. Report an issue: GitHub.