apache/seatunnel · critical · TaskExecuteException

All candidate sink tables were skipped in Flink starter.

Error message

All candidate sink tables were skipped in Flink starter.

What it means

TaskExecuteException thrown in AbstractSinkExecuteProcessor.execute when all candidate sink tables were skipped during pre-write processing, so no sink was written for the job. MultiTableFailureHelper renders a per-table failure summary listing why each table was skipped.

Source

Thrown at seatunnel-core/seatunnel-flink-starter/seatunnel-flink-starter-common/src/main/java/org/apache/seatunnel/core/starter/flink/execution/AbstractSinkExecuteProcessor.java:219

            boolean sinkParallelism = sinkConfig.hasPath(EnvCommonOptions.PARALLELISM.key());
            boolean envParallelism = envConfig.hasPath(EnvCommonOptions.PARALLELISM.key());
            int parallelism =
                    sinkParallelism
                            ? sinkConfig.getInt(EnvCommonOptions.PARALLELISM.key())
                            : envParallelism
                                    ? envConfig.getInt(EnvCommonOptions.PARALLELISM.key())
                                    : 1;

            DataStreamSink<SeaTunnelRow> dataStreamSink =
                    createVersionSpecificDataStreamSink(stream, sink, parallelism, sinkConfig);

            if (sinkParallelism || envParallelism) {
                dataStreamSink.setParallelism(parallelism);
            }
        }
        if (!createdAnySink && !skippedTables.isEmpty()) {
            throw new TaskExecuteException(
                    MultiTableFailureHelper.formatFailedTableSummary(
                            "All candidate sink tables were skipped in Flink starter.",
                            skippedTables));
        }
        if (createdAnySink && !skippedTables.isEmpty()) {
            LOGGER.warn(
                    MultiTableFailureHelper.formatFailedTableSummary(
                            "Some sink tables were skipped in Flink starter.", skippedTables));
        }
        // the sink is the last stream
        return null;
    }

    /** Create version-specific DataStreamSink with multi-table and parallelism support. */
    protected abstract DataStreamSink<SeaTunnelRow> createVersionSpecificDataStreamSink(
            DataStreamTableInfo stream, SeaTunnelSink sink, int parallelism, Config sinkConfig);

    // if not support multi table, rollback

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Inspect the per-table skip reasons in the exception summary and fix each root cause
  2. Configure save_mode so the sink can create or evolve target tables
  3. Confirm connector/table compatibility for the target storage
Defensive patterns

Strategy: validation

Validate before calling

// verify each target table's schema compatibility before submit
sink.factory().checkTargetTables(catalogTables).forEach(problem -> log.warn(problem));

Try / catch

try {
    processor.execute();
} catch (TaskExecuteException e) {
    log.error("All sink tables skipped: {}", e.getMessage());
    throw e;
}

Prevention

When it happens

Trigger: A Flink starter job where every sink (or every table of a multi-table sink) was skipped — typically due to failed save-mode handling, unsupported schema, or table-level pre-checks — leaving createdAnySink false with a non-empty skippedTables list.

Common situations: Target tables missing and auto-creation disabled; schema incompatibility between source data and target table; sink connector rejecting all configured catalog tables.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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