prestodb/presto · error · SemanticException
MISSING_SCHEMA
MISSING_SCHEMA
Error message
Schema name is empty
What it means
Analysis error from table name resolution: the qualified name built for a table reference ended up with an empty schema component (e.g. a quoted empty identifier like ""."t" or a malformed qualified name). A table reference must resolve to catalog.schema.table with a non-empty schema.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java:2418
inputField.getOriginColumnName(),
inputField.isAliased());
fieldBuilder.add(field);
analysis.propagateLineage(field, inputField);
}
fields = fieldBuilder.build();
}
return createAndAssignScope(table, scope, fields);
}
}
QualifiedObjectName name = createQualifiedObjectName(session, table, table.getName(), metadata);
analysis.setRelationName(table, QualifiedName.of(name.getCatalogName(), name.getSchemaName(), name.getObjectName()));
if (name.getObjectName().isEmpty()) {
throw new SemanticException(MISSING_TABLE, table, "Table name is empty");
}
if (name.getSchemaName().isEmpty()) {
throw new SemanticException(MISSING_SCHEMA, table, "Schema name is empty");
}
analysis.addEmptyColumnReferencesForTable(accessControl, session.getIdentity(), session.getTransactionId(), session.getAccessControlContext(), name);
Optional<ViewDefinition> optionalView = getViewDefinition(session, metadataResolver, analysis.getMetadataHandle(), name);
if (optionalView.isPresent()) {
return processView(table, scope, name, optionalView);
}
Optional<MaterializedViewDefinition> optionalMaterializedView = getMaterializedViewDefinition(session, metadataResolver, analysis.getMetadataHandle(), name);
// Prevent INSERT when selecting from a materialized view into one of its base tables (circular dependency).
if (optionalMaterializedView.isPresent() && analysis.getStatement() instanceof Insert) {
Insert insert = (Insert) analysis.getStatement();
QualifiedObjectName targetTable = createQualifiedObjectName(session, insert, insert.getTarget(), metadata);
SchemaTableName targetSchemaTable = new SchemaTableName(targetTable.getSchemaName(), targetTable.getObjectName());
if (optionalMaterializedView.get().getBaseTables().contains(targetSchemaTable)) {
throw new SemanticException(
NOT_SUPPORTED,
table,View on GitHub (pinned to 55bb57d202)
Solutions
- Spell out a full catalog.schema.table name
- Check for accidentally quoted empty identifiers in the query
- Set a valid default schema in the session (e.g. USE catalog.schema)
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java:2418 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/491bcec7cde44f5e.
Report an issue: GitHub.