t8y2/dbx · error
SHOW DATABASES failed (%v); HiveServer2 metadata fallback fa
Error message
SHOW DATABASES failed (%v); HiveServer2 metadata fallback failed: %w
What it means
listDatabases first tries 'SHOW DATABASES' via SQL. If that fails, it falls back to HiveServer2 JDBC metadata (GetHiveSchemas). This error is raised only when BOTH paths fail, embedding the original SHOW DATABASES error (%v) and wrapping the metadata fallback error (%w).
Source
Thrown at agents/drivers/hive-go/metadata.go:248
"productVersion": version,
"unquotedIdentifierCase": "mixed",
"quotedIdentifierCase": "mixed",
"driverName": driverName,
"driverVersion": "gohive-v2.1.0",
},
}, nil
}
func (server *server) listDatabases() ([]databaseInfo, error) {
result, err := server.executeQuery(queryOptions{SQL: "SHOW DATABASES", MaxRows: metadataQueryLimit})
if err == nil {
return databaseInfoFromQueryRows(result.Rows), nil
}
metadataResult, metadataErr := server.hiveMetadata(func(ctx context.Context, provider gohive.MetadataProvider) (gohive.MetadataResult, error) {
return provider.GetHiveSchemas(ctx, "%")
})
if metadataErr != nil {
return nil, fmt.Errorf("SHOW DATABASES failed (%v); HiveServer2 metadata fallback failed: %w", err, metadataErr)
}
rows := newHiveMetadataRows(metadataResult)
values := make([]databaseInfo, 0, len(rows.rows))
seen := map[string]bool{}
for _, row := range rows.rows {
name := metadataString(rows.value(row, "TABLE_SCHEM", "SCHEMA_NAME"))
if name == "" || seen[name] {
continue
}
seen[name] = true
values = append(values, databaseInfo{Name: name})
}
sort.Slice(values, func(first, second int) bool { return values[first].Name < values[second].Name })
return values, nil
}
func databaseInfoFromQueryRows(rows [][]any) []databaseInfo {
values := make([]databaseInfo, 0, len(rows))View on GitHub (pinned to c0390bff16)
Solutions
- Fix the root cause in the first parenthesized error (SHOW DATABASES failure) — it usually indicates permissions or connectivity
- Check the wrapped metadata error for HiveServer2 transport/auth issues
- Grant the connecting user rights to list databases, or configure a visible_schemas allowlist
- Reconnect — if both paths failed it may be a dropped connection rather than authorization
Defensive patterns
Strategy: try-catch
Try / catch
dbs, err := server.listDatabases()
if err != nil {
if strings.Contains(err.Error(), "SHOW DATABASES failed") {
log.Printf("cannot enumerate databases: %v", err)
}
return err
} Prevention
- Verify the connect user can run SHOW DATABASES in beeline first
- Configure explicit visible_schemas if catalog listing is restricted
- Keep connections healthy so the metadata fallback isn't racing a dead socket
When it happens
Trigger: Calling list_databases (or list_schemas, which delegates) when the connection can neither run SHOW DATABASES (permissions, unsupported statement) nor complete the GetHiveSchemas metadata call (transport failure, permission on metadata API).
Common situations: User lacks permission to list databases; connection dropped mid-metadata call; restricted HiveServer2 policy blocking both SQL and metadata catalog access; Impala/older Hive with quirks in both paths.
Related errors
- HiveServer2 metadata failed (%v); %s fallback failed: %w
- HiveServer2 metadata failed (%v); DESCRIBE fallback failed:
- HiveServer2 table comment metadata failed (%v); table listin
- Hive driver does not expose HiveServer2 metadata RPCs
- table is required
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/1adca888192a35ce.
Report an issue: GitHub.