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

  1. Fix the root cause in the first parenthesized error (SHOW DATABASES failure) — it usually indicates permissions or connectivity
  2. Check the wrapped metadata error for HiveServer2 transport/auth issues
  3. Grant the connecting user rights to list databases, or configure a visible_schemas allowlist
  4. 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

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


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/1adca888192a35ce. Report an issue: GitHub.