apache/iceberg · error · NoSuchNamespaceException
Namespace %s(%s) properties object is absent
Error message
Namespace %s(%s) properties object is absent
What it means
Failure in EcsCatalog.loadNamespaceMetadata: the namespace exists as a listing entry but its ECS properties object (the marker object holding namespace properties) is absent, so metadata cannot be loaded. This indicates an incomplete or externally-created namespace layout in the ECS bucket.
Source
Thrown at dell/src/main/java/org/apache/iceberg/dell/ecs/EcsCatalog.java:325
private Namespace parseNamespace(Namespace parent, EcsURI prefix, S3Object s3Object) {
String key = s3Object.getKey();
Preconditions.checkArgument(
key.startsWith(prefix.name()), "List result should have same prefix", key, prefix);
String namespaceName =
key.substring(prefix.name().length(), key.length() - NAMESPACE_OBJECT_SUFFIX.length());
String[] namespace = Arrays.copyOf(parent.levels(), parent.levels().length + 1);
namespace[namespace.length - 1] = namespaceName;
return Namespace.of(namespace);
}
/** Load namespace properties. */
@Override
public Map<String, String> loadNamespaceMetadata(Namespace namespace)
throws NoSuchNamespaceException {
EcsURI namespaceObject = namespaceURI(namespace);
if (!objectMetadata(namespaceObject).isPresent()) {
throw new NoSuchNamespaceException(
"Namespace %s(%s) properties object is absent", namespace, namespaceObject);
}
Map<String, String> result = loadProperties(namespaceObject).content();
LOG.debug("Loaded metadata for namespace {} found {}", namespace, result);
return result;
}
@Override
public boolean dropNamespace(Namespace namespace) throws NamespaceNotEmptyException {
if (!namespace.isEmpty() && !namespaceExists(namespace)) {
throw new NoSuchNamespaceException("Namespace %s does not exist", namespace);
}
if (!listNamespaces(namespace).isEmpty() || !listTables(namespace).isEmpty()) {
throw new NamespaceNotEmptyException("Namespace %s is not empty", namespace);
}View on GitHub (pinned to 86d9c8fc54)
Solutions
- Confirm the namespace exists with namespaceExists before loading metadata
- Recreate the namespace with createNamespace if it was deleted
- Verify the catalog's warehouse/ECS prefix configuration matches where namespaces were created
Example fix
// before
Map<String,String> props = catalog.loadNamespaceMetadata(ns);
// after
if (catalog.namespaceExists(ns)) {
Map<String,String> props = catalog.loadNamespaceMetadata(ns);
} Defensive patterns
Strategy: try-catch
Validate before calling
boolean exists = catalog.namespaceExists(namespace);
Try / catch
try { return catalog.loadNamespaceMetadata(ns); } catch (NoSuchNamespaceException e) { return Collections.emptyMap(); } Prevention
- Confirm the namespace was created through the catalog, not raw ECS objects
- Verify warehouse/prefix configuration consistency across environments
- Don't delete namespace marker objects directly in ECS
When it happens
Trigger: Calling loadNamespaceMetadata(namespace) when no namespace properties object exists at the computed namespaceURI, e.g. namespace never created or its marker object deleted out of band.
Common situations: Loading a namespace after someone deleted the marker object directly in ECS, wrong catalog warehouse prefix configuration, case/typo differences in namespace names.
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
- Namespace %s does not exist
- Cannot rename %s to %s because namespace %s does not exist
- namespace %s(%s) has already existed
- Namespace %s is not empty
- Namespace does not exist: %s
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/ab272e0c3d409e75.
Report an issue: GitHub.