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

  1. Use a gohive version whose connection implements gohive.MetadataProvider; pin/upgrade the dependency (go get -u the driver and go mod tidy).
  2. Remove any wrapper around the raw connection so connection.Raw receives the concrete gohive connection type.
  3. If the driver cannot provide metadata RPCs, avoid metadata endpoints or fall back to SQL-based metadata (SHOW TABLES / DESCRIBE).
  4. 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

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


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