apache/iceberg · error · NoSuchTableException
Metadata object is absent while refresh a loaded table…
Error message
Metadata object %s is absent while refresh a loaded table. Maybe the table is deleted/moved.
What it means
NoSuchTableException thrown by EcsTableOperations.doRefresh when the table's metadata object disappeared from ECS during a refresh of an already-loaded table. It signals the table was deleted or moved after it was loaded.
Solutions
- Reload the table from the catalog instead of refreshing a stale reference
- Coordinate table drops with running consumers
- Check whether the table was deleted/moved and re-create or re-point it
Example fix
// before
table.refresh();
// after
try {
table.refresh();
} catch (NoSuchTableException e) {
table = catalog.loadTable(tableId); // reload or handle deletion
} Defensive patterns
Strategy: try-catch
Try / catch
try { table.refresh(); } catch (NoSuchTableException e) { table = catalog.loadTable(tableId); /* or stop processing */ } Prevention
- Coordinate table drops with long-running consumers
- Reload tables from the catalog after detecting deletion
- Never delete table metadata objects directly in ECS
When it happens
Trigger: Refreshing a previously loaded Table whose metadata properties object no longer exists in ECS (currentMetadataLocation was non-null).
Common situations: Another process dropped the table while a long-running job held a loaded reference, manual deletion of ECS objects, table moved to a different location.
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
- Replace failed, E-Tag
- Table is existing when create table
- Cannot create namespace
- Cannot find Glue table
- Cannot list child namespaces from
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/9be994921a61548b.
Report an issue: GitHub.
Appendix: source
Thrown at dell/src/main/java/org/apache/iceberg/dell/ecs/EcsTableOperations.java:70
this.catalog = catalog;
}
@Override
protected String tableName() {
return tableName;
}
@Override
public FileIO io() {
return fileIO;
}
@Override
protected void doRefresh() {
String metadataLocation;
if (!catalog.objectMetadata(tableObject).isPresent()) {
if (currentMetadataLocation() != null) {
throw new NoSuchTableException(
"Metadata object %s is absent while refresh a loaded table. "
+ "Maybe the table is deleted/moved.",
tableObject);
} else {
metadataLocation = null;
}
} else {
EcsCatalog.Properties metadata = catalog.loadProperties(tableObject);
this.eTag = metadata.eTag();
metadataLocation = metadata.content().get(ICEBERG_METADATA_LOCATION);
Preconditions.checkNotNull(
metadataLocation, "Can't find location from table metadata %s", tableObject);
}
refreshFromMetadataLocation(metadataLocation);
}
@OverrideView on GitHub (pinned to 86d9c8fc54)