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

  1. Spell out a full catalog.schema.table name
  2. Check for accidentally quoted empty identifiers in the query
  3. 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.