apache/seatunnel · warning
Skip failed sink table in Spark starter: {}
Error message
Skip failed sink table in Spark starter: {} What it means
logSkippedTable records a single sink table that failed during sink creation/initialization in the Spark starter and logs a warn line with the formatted failure details. The failed table is added to the skipped list so the job can continue with the remaining tables (partial-success semantics).
Source
Thrown at seatunnel-core/seatunnel-spark-starter/seatunnel-spark-starter-common/src/main/java/org/apache/seatunnel/core/starter/spark/execution/SinkExecuteProcessor.java:259
return new RuntimeException(error);
}
private void logSkippedTable(
List<MultiTableFailedTable> currentSkippedTables,
List<MultiTableFailedTable> skippedTables,
CatalogTable catalogTable,
Config sinkConfig,
MultiTableFailurePhase phase,
Throwable error) {
MultiTableFailedTable failedTable =
MultiTableFailureHelper.buildFailedTable(
catalogTable.getTablePath().getFullName(),
phase,
sinkConfig.getString(PLUGIN_NAME.key()),
error);
currentSkippedTables.add(failedTable);
skippedTables.add(failedTable);
log.warn(
"Skip failed sink table in Spark starter: {}",
MultiTableFailureHelper.formatFailedTableLine(failedTable),
error);
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Inspect the logged failed-table line: it names the table path, phase (create/init), plugin name, and the root error.
- Fix the root cause for that table (correct path, add missing plugin jar, align schema).
- Check catalog/datasource connectivity for that specific target table.
- Set fail-fast behavior if partial writes are not acceptable in your pipeline.
Example fix
// before
sink {
Console {
source_table_name = "missing_table"
}
}
// after: reference an existing upstream table
sink {
Console {
source_table_name = "actual_transformed_table"
}
} Defensive patterns
Strategy: validation
Validate before calling
// Verify referenced upstream table exists before sink creation
if (!catalogTables.containsKey(failedTable.getTablePath())) {
throw new IllegalArgumentException("No catalog table for " + failedTable.getTablePath().getFullName());
} Prevention
- Ensure every sink's source_table_name matches an existing upstream table id.
- Install all sink plugin jars before running multi-table jobs.
- Prefer fail-fast config when partial sink writes are not acceptable.
When it happens
Trigger: During SinkExecuteProcessor sink creation, the per-table initialization (catalog table lookup, plugin loading, sink instantiation) throws for one specific table path, and the configured error-handling phase permits skipping.
Common situations: Typos in table identifiers, missing catalog table metadata, sink plugin not on the classpath, or per-table schema incompatibility discovered at init time.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- All candidate sink tables were skipped in Spark starter.
- All candidate sink tables were skipped in Spark starter.
- Some sink tables were skipped in Spark starter.
- Skip failed sink table in Spark starter: {}
- Some sink tables were skipped in Spark starter.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/b92264fee8da7fb2.
Report an issue: GitHub.