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

  1. Create the missing table in the catalog (or let the connector's create-identifier/auto-create behavior run if enabled).
  2. Fix the connector's route/tables configuration to point at an existing table identifier (check catalog, database/namespace, and table name spelling).
  3. Verify you are pointing at the intended catalog/environment (dev vs prod) in the catalog configuration.
  4. 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

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


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/c9075a56eafc7b46. Report an issue: GitHub.