prestodb/presto · error · ViewNotFoundException
View not found
Error message
View not found
What it means
Mapped from TableNotFoundException when DROP VIEW cannot find the named object: the connector delegates to metastore.dropTable and translates the missing-table error into ViewNotFoundException. It means no Presto view with that schema.table name exists in the metastore.
Source
Thrown at presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadata.java:2504
catch (TableAlreadyExistsException e) {
throw new ViewAlreadyExistsException(e.getTableName());
}
}
@Override
public void dropView(ConnectorSession session, SchemaTableName viewName)
{
ConnectorViewDefinition view = getViews(session, viewName.toSchemaTablePrefix()).get(viewName);
checkIfNullView(view, viewName);
try {
metastore.dropTable(
new HdfsContext(session, viewName.getSchemaName()),
viewName.getSchemaName(),
viewName.getTableName());
}
catch (TableNotFoundException e) {
throw new ViewNotFoundException(e.getTableName());
}
}
@Override
public List<SchemaTableName> listViews(ConnectorSession session, String schemaNameOrNull)
{
ImmutableList.Builder<SchemaTableName> tableNames = ImmutableList.builder();
MetastoreContext metastoreContext = getMetastoreContext(session);
for (String schemaName : listSchemas(session, schemaNameOrNull)) {
for (String tableName : metastore.getAllViews(metastoreContext, schemaName).orElse(emptyList())) {
tableNames.add(new SchemaTableName(schemaName, tableName));
}
}
return tableNames.build();
}
@Override
public Map<SchemaTableName, ConnectorViewDefinition> getViews(ConnectorSession session, SchemaTablePrefix prefix)View on GitHub (pinned to 55bb57d202)
Solutions
- Use DROP VIEW IF EXISTS to make the statement idempotent
- Verify the exact name with SHOW TABLES / system metadata or listViews
- Confirm you are connected to the right catalog and schema
- If a plain table with that name exists, use DROP TABLE instead of DROP VIEW
Example fix
-- before DROP VIEW analytics.daily_revenue; -- after DROP VIEW IF EXISTS analytics.daily_revenue;
Defensive patterns
Strategy: try-catch
Try / catch
try {
run("DROP VIEW " + name);
} catch (ViewNotFoundException e) {
// already gone — fine for cleanup scripts
log.info("View absent, skipping: {}", name);
} Prevention
- Always use DROP VIEW IF EXISTS in scripts
- Confirm object type (view vs table) before dropping
- Pin the catalog/schema in automated jobs
- Check listViews output before destructive cleanup
When it happens
Trigger: DROP VIEW on a name that was never created, was already dropped, exists only as a plain Hive table (not a view), or whose schema is misspelled/points at the wrong catalog.
Common situations: Non-idempotent cleanup scripts dropping views twice; typo in schema or view name; querying the wrong catalog (e.g. hive vs iceberg) where the view does not exist; views dropped by another team member.
Related errors
- View already exists
- Materialized view not found
- NOT_FOUND
- Materialized view already exists
- HIVE_COLUMN_ORDER_MISMATCH
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/fb984c33f741cdd3.
Report an issue: GitHub.