t8y2/dbx · error
Hive driver does not expose HiveServer2 metadata RPCs
Error message
Hive driver does not expose HiveServer2 metadata RPCs
What it means
Inside hiveMetadata, the raw underlying driver connection is type-asserted to gohive.MetadataProvider. If the raw connection returned by connection.Raw does not implement that interface, the driver build in use cannot issue HiveServer2 metadata RPCs (GetTables, GetColumns, etc.), so this error is thrown. It is a driver-capability mismatch, not a server problem.
Source
Thrown at agents/drivers/hive-go/metadata.go:188
}
func normalizeMetadataColumn(value string) string {
return strings.NewReplacer("_", "", "-", "", " ", "").Replace(strings.ToUpper(strings.TrimSpace(value)))
}
func (server *server) hiveMetadata(operation func(context.Context, gohive.MetadataProvider) (gohive.MetadataResult, error)) (gohive.MetadataResult, error) {
connection, err := server.requireConnection()
if err != nil {
return gohive.MetadataResult{}, err
}
ctx, cancel := context.WithCancel(context.Background())
server.setActiveOperation(cancel)
defer server.clearActiveOperation(cancel)
var result gohive.MetadataResult
err = connection.Raw(func(rawConnection any) error {
provider, ok := rawConnection.(gohive.MetadataProvider)
if !ok {
return errors.New("Hive driver does not expose HiveServer2 metadata RPCs")
}
var operationErr error
result, operationErr = operation(ctx, provider)
return operationErr
})
return result, err
}
func (server *server) connectionInfo() (map[string]any, error) {
version := ""
if result, err := server.executeQuery(queryOptions{SQL: "SELECT VERSION()", MaxRows: 1, TimeoutSecs: 5}); err == nil && len(result.Rows) > 0 && len(result.Rows[0]) > 0 {
version = stringValue(result.Rows[0][0])
}
username := server.config.Username
if result, err := server.executeQuery(queryOptions{SQL: "SELECT CURRENT_USER()", MaxRows: 1, TimeoutSecs: 5}); err == nil && len(result.Rows) > 0 && len(result.Rows[0]) > 0 {
if current := stringValue(result.Rows[0][0]); current != "" {
username = current
}View on GitHub (pinned to c0390bff16)
Solutions
- Use a gohive version whose connection implements gohive.MetadataProvider; pin/upgrade the dependency (go get -u the driver and go mod tidy).
- Remove any wrapper around the raw connection so connection.Raw receives the concrete gohive connection type.
- If the driver cannot provide metadata RPCs, avoid metadata endpoints or fall back to SQL-based metadata (SHOW TABLES / DESCRIBE).
- Add a startup capability check: call a cheap metadata RPC at connect time to fail fast with a clear message.
Example fix
// before require github.com/sql-machine-language/gohive v0.0.0-old // lacks MetadataProvider // after go get github.com/yourorg/gohive@v1.2.3 // connection implements gohive.MetadataProvider go mod tidy
Defensive patterns
Strategy: type-guard
Validate before calling
// Go — verify capability at startup
var _ gohive.MetadataProvider = conn // compile-time check where possible
_, err := srv.ListDatabases(); if err != nil { fail fast } Type guard
func supportsMetadata(raw any) bool {
_, ok := raw.(gohive.MetadataProvider)
return ok
} Try / catch
tables, err := srv.ListTables(schema)
if err != nil && strings.Contains(err.Error(), "Metadata RPCs") {
// fallback to SQL-based metadata
tables, err = srv.Dispatch(queryOptions{SQL: "SHOW TABLES IN " + schema})
} Prevention
- Pin a gohive version known to implement gohive.MetadataProvider.
- Do not wrap or proxy the raw driver connection.
- Smoke-test one metadata RPC at connect time.
- Keep a SQL-based metadata fallback (SHOW TABLES / DESCRIBE).
When it happens
Trigger: Calling any metadata-backed operation (listDatabases, listTables, getColumns, getTableComment) when the underlying gohive driver/connection type does not implement gohive.MetadataProvider — e.g. a different or older gohive version, or a wrapped/proxied connection that hides the concrete type.
Common situations: Upgrading or swapping the gohive dependency to a version whose connection type no longer implements MetadataProvider; injecting a custom dialer/wrapper that returns a non-standard connection; vendoring an old fork of the driver.
Related errors
- table is required
- Hive host is required
- Hive connection string must start with jdbc:hive2:// or hive
- Hive endpoint is empty
- Hive JWT authentication requires jwt or the JWT environment
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/916eb93591a4cd8d.
Report an issue: GitHub.