prestodb/presto · error · PrestoException
HIVE_INVALID_METADATA
HIVE_INVALID_METADATA
Error message
Table is missing storage descriptor
What it means
fromMetastoreApiTable converts a raw Thrift metastore Table into Presto's Table model and requires a non-null StorageDescriptor; the incoming metastore object lacks one, which is invalid metadata, so this guard fires to prevent building a table without column/location information.
Source
Thrown at presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/thrift/ThriftMetastoreUtil.java:413
if (parameters == null) {
parameters = ImmutableMap.of();
}
return Database.builder()
.setDatabaseName(database.getName())
.setLocation(Optional.ofNullable(database.getLocationUri()))
.setOwnerName(ownerName)
.setOwnerType(ownerType)
.setComment(Optional.ofNullable(database.getDescription()))
.setParameters(parameters)
.build();
}
public static Table fromMetastoreApiTable(org.apache.hadoop.hive.metastore.api.Table table, ColumnConverter columnConverter)
{
StorageDescriptor storageDescriptor = table.getSd();
if (storageDescriptor == null) {
throw new PrestoException(HIVE_INVALID_METADATA, "Table is missing storage descriptor");
}
return fromMetastoreApiTable(table, storageDescriptor.getCols(), columnConverter);
}
public static Table fromMetastoreApiTable(org.apache.hadoop.hive.metastore.api.Table table, List<FieldSchema> schema, ColumnConverter columnConverter)
{
StorageDescriptor storageDescriptor = table.getSd();
if (storageDescriptor == null) {
throw new PrestoException(HIVE_INVALID_METADATA, "Table is missing storage descriptor");
}
// TODO: remove the table type change after Hive 3.0 update.
// Materialized view fetched from Hive Metastore uses TableType.MANAGED_TABLE before Hive 3.0. Cast it back to MATERIALIZED_VIEW here.
PrestoTableType tableType = PrestoTableType.optionalValueOf(table.getTableType()).orElse(OTHER);
if (table.getParameters() != null && "true".equals(table.getParameters().get(PRESTO_MATERIALIZED_VIEW_FLAG))) {
checkState(
TableType.MANAGED_TABLE.name().equals(table.getTableType()),
"Materialized view %s has incorrect table type %s from Metastore.", table.getTableName(), table.getTableType());View on GitHub (pinned to 55bb57d202)
Solutions
- Repair the table metadata in the Hive metastore so it has a StorageDescriptor (e.g. recreate the table)
- Investigate the client or export tool that produced a Table message without a storage descriptor
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/thrift/ThriftMetastoreUtil.java:413 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/84f96269daec4929.
Report an issue: GitHub.