apache/seatunnel · warning
Ignore schema change event for unknown table
Error message
Ignore schema change event for unknown table {}, current table ids: {} What it means
SeaTunnelSourceCollector (multi-table mode) received a schema-change event whose tablePath does not exist in its rowTypeMap, so the event cannot be applied. It is ignored with this warning and processing continues with the existing schemas.
Solutions
- Verify the tablePath in the event matches the table identifiers configured in the source (case, catalog, schema prefix)
- If the new table should be read, add it to the source's table list and restart the job (dynamic table addition is not applied automatically here)
- Check connector configuration (table-names / catalog-table pattern) to ensure it covers all tables emitting schema changes
- Enable debug logging to compare rowTypeMap keys against incoming event tablePaths
Example fix
// before table-names = "shop.orders" // event arrives for shop.order_items // after table-names = "shop.orders,shop.order_items"
Defensive patterns
Strategy: validation
Validate before calling
// verify every table emitting schema changes is present in the job's table list
String tableId = event.tablePath().toString();
if (!configuredTableIds.contains(tableId)) {
log.warn("Table {} not configured; add it to table-names or ignore its events", tableId);
} Try / catch
// tolerate skipped tables but track them for reconciliation
try {
applySchemaChange(event);
} catch (UnknownTableException e) {
skippedTables.add(e.tableId()); // reconcile later against source config
} Prevention
- Keep the source's table-names/catalog-table config in sync with the upstream database
- Match table identifier casing exactly (some catalogs are case-sensitive)
- When new tables are added upstream, update config and restart the job
- Monitor this warning as a signal of config drift between source DB and job config
When it happens
Trigger: A source connector (e.g. CDC multi-table) emits an AddColumnEvent/AlterTableEvent for a table that was never registered in the collector's rowTypeMap — e.g. a new table appeared after job start that wasn't included in the table list, or tablePath naming differs.
Common situations: Upstream database adds a table not covered by the job's table config; case/format differences in table identifiers (schema.table) between the event and configured tables; events for dropped/excluded tables arriving mid-stream.
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
- Column already exists in table . Skipping change column…
- DataTypeChanger not reset
- Invalid value for option '" + optionKey + "'. " +…
- Schema change event type name must not be null. Valid names…
- Unknown schema change event type '" + canonicalName + "'…
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/914a64546ae3769d.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/task/SeaTunnelSourceCollector.java:338
if (dryRunSampleCount == dryRunSampleLimit && dryRunSampleComplete != null) {
dryRunSampleComplete.run();
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void collect(SchemaChangeEvent event) {
try {
if (rowType instanceof SeaTunnelRowType) {
rowType = dataTypeChangeEventHandler.reset((SeaTunnelRowType) rowType).apply(event);
} else if (rowType instanceof MultipleRowType) {
String tableId = event.tablePath().toString();
SeaTunnelRowType currentRowType = rowTypeMap.get(tableId);
if (currentRowType == null) {
log.warn(
"Ignore schema change event for unknown table {}, current table ids: {}",
tableId,
rowTypeMap.keySet());
return;
}
rowTypeMap.put(
tableId, dataTypeChangeEventHandler.reset(currentRowType).apply(event));
} else {
throw new SeaTunnelEngineException(
"Unsupported row type: " + rowType.getClass().getName());
}
sendRecordToNext(new Record<>(event));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@OverrideView on GitHub (pinned to cf67b549a7)