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 SinkExecuteProcessor.execute when every candidate sink table failed pre-write checks and was skipped, so no DataStream sink was created at all. MultiTableFailureHelper formats a summary of the failed tables with their failure reasons so the user can see why all sinks were dropped.
Source
Thrown at seatunnel-core/seatunnel-flink-starter/seatunnel-flink-13-starter/src/main/java/org/apache/seatunnel/core/starter/flink/execution/SinkExecuteProcessor.java:229
.equalsIgnoreCase(envConfig.getString("job.mode"));
DataStream<SeaTunnelRow> ds = stream.getDataStream();
if (isStreaming && sink instanceof SupportSchemaEvolutionSink) {
// insert broadcast-based schema operator to handle schema changes
ds =
ds.transform(
"BroadcastSchemaHandler",
TypeInformation.of(SeaTunnelRow.class),
new BroadcastSchemaSinkOperator())
.name("BroadcastSchemaHandler")
.setParallelism(parallelism);
}
DataStreamSink<SeaTunnelRow> dataStreamSink =
ds.sinkTo(new FlinkSink<>(sink, stream.getCatalogTables(), parallelism))
.name(String.format("%s-Sink", sink.getPluginName()));
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;
}
// if not support multi table, rollback
public SeaTunnelSink tryGenerateMultiTableSink(
Map<TablePath, SeaTunnelSink> sinks,
ReadonlyConfig sinkConfig,
ClassLoader classLoader) {View on GitHub (pinned to cf67b549a7)
Solutions
- Read the per-table failure reasons in the formatted summary and fix the root cause (schema mismatch, missing table, etc.)
- Enable/adjust save_mode config so the sink can create/repair the target table
- Verify the sink connector supports the target table type on the Flink 1.13 starter
Defensive patterns
Strategy: validation
Validate before calling
// before submitting, verify target tables exist / are compatible
for (CatalogTable table : catalogTables) {
if (!sink.supportsTable(table)) {
log.warn("Table {} will be skipped", table.getTablePath());
}
} Try / catch
try {
processor.execute();
} catch (TaskExecuteException e) {
log.error("All sink tables skipped: {}", e.getMessage());
throw e;
} Prevention
- Pre-check sink table schemas against source data before running the job
- Enable save_mode so the sink can create missing tables
- Test the connector against the target storage before production jobs
When it happens
Trigger: Running a Flink (1.13) starter job where each sink plugin (or each table in a multi-table sink) was skipped during execution — e.g. schema/catalog incompatibility, save-mode pre-check failure, or unsupported table — and skippedTables is non-empty while createdAnySink stays false.
Common situations: Sink connector rejecting the target table schema; database table missing and save-mode create disabled; connector not supporting the configured catalog table in Flink 1.3 starter.
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
- All candidate sink tables were skipped in Flink starter.
- Some sink tables were skipped in Flink starter.
- Skip failed sink table in Flink starter: {}
- Some sink tables were skipped in Flink starter.
- Skip failed sink table in Flink starter: {}
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e80e1959297191f3.
Report an issue: GitHub.