apache/iceberg · warning
Skipping commits to table
Error message
Skipping commits to table {} due to target table mismatch. Expected: {} Received: {} What it means
The loaded table's UUID does not match the UUID recorded in the TableReference, meaning the table was dropped and recreated (or replaced) since the coordinator first resolved it. Commits to that table are skipped to avoid writing to a table the connector did not originally target.
Solutions
- If the recreation was intentional, restart the connector so TableReferences are refreshed with the new table UUID.
- If it was accidental, restore the original table (undrop is rarely possible — recreate and backfill, then restart the connector).
- Prevent by stopping maintenance/rebuild jobs from dropping connector target tables while ingestion is running.
- Audit which process replaced the table (check catalog metadata logs) before deciding to adopt the new UUID.
Defensive patterns
Strategy: validation
Validate before calling
// detect table recreation before it surprises the connector
Table loaded = catalog.loadTable(identifier);
if (referenceUuid != null && !referenceUuid.equals(loaded.uuid())) {
// table was replaced: restart connector or restore the original table
} Prevention
- Do not drop-and-recreate connector target tables; use schema evolution instead.
- Restart the connector whenever target tables are intentionally replaced so UUIDs refresh.
- Coordinate rebuild pipelines with the connector's operating window.
- Audit catalog logs to identify which job replaced the table.
When it happens
Trigger: tableReference.uuid() is non-null and differs from table.uuid() after catalog.loadTable — i.e. the physical table identity changed (drop+create, snapshot restore/replace, or catalog pointing at a different table of the same name).
Common situations: Someone dropped and recreated the target table; a data pipeline rebuilt the table (CREATE OR REPLACE); environments switched (table same name but different table in another catalog); schema-rebuild jobs running concurrently with the connector.
Related errors
- ${msg}
- Must specify table name(s)
- Partial commit failed for task , will retry
- Table not found, skipping commit
- ALTER VIEW AS is not supported. Use CREATE OR REPLACE VIEW…
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/70f0db493628902c.
Report an issue: GitHub.
Appendix: source
Thrown at kafka-connect/kafka-connect/src/main/java/org/apache/iceberg/connect/channel/Coordinator.java:252
}
@SuppressWarnings("checkstyle:CyclomaticComplexity")
private void commitToTable(
TableReference tableReference,
List<Envelope> envelopeList,
Map<Integer, Long> controlTopicOffsets,
OffsetDateTime validThroughTs) {
TableIdentifier tableIdentifier = tableReference.identifier();
Table table;
try {
table = catalog.loadTable(tableIdentifier);
} catch (NoSuchTableException e) {
LOG.warn("Table not found, skipping commit: {}", tableIdentifier, e);
return;
}
if (tableReference.uuid() != null && !tableReference.uuid().equals(table.uuid())) {
LOG.warn(
"Skipping commits to table {} due to target table mismatch. Expected: {} Received: {}",
tableIdentifier,
table.uuid(),
tableReference.uuid());
return;
}
String branch = config.tableConfig(tableIdentifier.toString()).commitBranch();
// Control topic partition offsets may include a subset of partition ids if there were no
// records for other partitions. Merge the updated topic partitions with the last committed
// offsets.
Map<Integer, Long> committedOffsets = lastCommittedOffsetsForTable(table, branch);
Map<Integer, Long> mergedOffsets =
Stream.of(committedOffsets, controlTopicOffsets)
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Long::max));
String offsetsJson = offsetsToJson(mergedOffsets);View on GitHub (pinned to 86d9c8fc54)