{"record":{"id":"b92264fee8da7fb2","repo":"apache/seatunnel","slug":"skip-failed-sink-table-in-spark-starter-b92264","errorCode":null,"errorMessage":"Skip failed sink table in Spark starter: {}","messagePattern":"Skip failed sink table in Spark starter: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-core/seatunnel-spark-starter/seatunnel-spark-starter-common/src/main/java/org/apache/seatunnel/core/starter/spark/execution/SinkExecuteProcessor.java","lineNumber":259,"sourceCode":"        return new RuntimeException(error);\n    }\n\n    private void logSkippedTable(\n            List<MultiTableFailedTable> currentSkippedTables,\n            List<MultiTableFailedTable> skippedTables,\n            CatalogTable catalogTable,\n            Config sinkConfig,\n            MultiTableFailurePhase phase,\n            Throwable error) {\n        MultiTableFailedTable failedTable =\n                MultiTableFailureHelper.buildFailedTable(\n                        catalogTable.getTablePath().getFullName(),\n                        phase,\n                        sinkConfig.getString(PLUGIN_NAME.key()),\n                        error);\n        currentSkippedTables.add(failedTable);\n        skippedTables.add(failedTable);\n        log.warn(\n                \"Skip failed sink table in Spark starter: {}\",\n                MultiTableFailureHelper.formatFailedTableLine(failedTable),\n                error);\n    }\n}\n","sourceCodeStart":241,"sourceCodeEnd":265,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-core/seatunnel-spark-starter/seatunnel-spark-starter-common/src/main/java/org/apache/seatunnel/core/starter/spark/execution/SinkExecuteProcessor.java#L241-L265","documentation":"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).","triggerScenarios":"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.","commonSituations":"Typos in table identifiers, missing catalog table metadata, sink plugin not on the classpath, or per-table schema incompatibility discovered at init time.","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."],"exampleFix":"// before\nsink {\n  Console {\n    source_table_name = \"missing_table\"\n  }\n}\n// after: reference an existing upstream table\nsink {\n  Console {\n    source_table_name = \"actual_transformed_table\"\n  }\n}","handlingStrategy":"validation","validationCode":"// Verify referenced upstream table exists before sink creation\nif (!catalogTables.containsKey(failedTable.getTablePath())) {\n    throw new IllegalArgumentException(\"No catalog table for \" + failedTable.getTablePath().getFullName());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["spark","sink","skip-on-error","multi-table"],"backgroundTag":"resource-not-found","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}