apache/iceberg · warning
Table not found, skipping commit: {}
Error message
Table not found, skipping commit: {} What it means
commitToTable attempted to load the target Iceberg table and the catalog threw NoSuchTableException. The commit to that table is skipped (offsets for its records will be committed along with the overall cycle) and a warning is logged, rather than failing the whole coordinator commit.
Source
Thrown at kafka-connect/kafka-connect/src/main/java/org/apache/iceberg/connect/channel/Coordinator.java:247
try {
return MAPPER.writeValueAsString(offsets);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
@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);View on GitHub (pinned to 86d9c8fc54)
Solutions
- Create the missing table in the catalog (or let the connector's create-identifier/auto-create behavior run if enabled).
- Fix the connector's route/tables configuration to point at an existing table identifier (check catalog, database/namespace, and table name spelling).
- Verify you are pointing at the intended catalog/environment (dev vs prod) in the catalog configuration.
- If the table was intentionally dropped, remove its route from the connector config and restart the connector.
Defensive patterns
Strategy: validation
Validate before calling
// verify the route target exists before starting the connector
Table table = catalog.loadTable(TableIdentifier.of("db", "target")); Try / catch
try {
catalog.loadTable(tableIdentifier);
} catch (NoSuchTableException e) {
// create the table or fix the route config before restarting the connector
} Prevention
- Pre-create route target tables or enable the connector's identifier-based auto-creation.
- Double-check catalog/namespace/table spelling in connector routes.
- Confirm the connector points at the intended catalog environment.
- Remove routes to intentionally dropped tables from the configuration.
When it happens
Trigger: catalog.loadTable(identifier) raises NoSuchTableException because the route target table does not exist in the catalog at commit time.
Common situations: Table dropped or renamed after the connector was configured; typo in the connector's target table identifier; catalog namespace configured differently (wrong catalog or environment); table not yet created in a fresh environment.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- TableNotExistException
- Cannot find table %s to drop
- Cannot rename table %s to %s: %s does not exist
- Cannot find Dynamo catalog table %s
- DatabaseNotEmptyException
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/c9075a56eafc7b46.
Report an issue: GitHub.