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

  1. Inspect the logged failed-table line: it names the table path, phase (create/init), plugin name, and the root error.
  2. Fix the root cause for that table (correct path, add missing plugin jar, align schema).
  3. Check catalog/datasource connectivity for that specific target table.
  4. 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

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


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