t8y2/dbx · error

Cassandra table not found: %s.%s

Error message

Cassandra table not found: %s.%s

What it means

While building a table's DDL, the driver computes the PRIMARY KEY from the metadata's PartitionKey. If the partition key list is empty, no valid Cassandra table definition can be produced, so buildTableDDL aborts with this error.

Source

Thrown at agents/drivers/cassandra-go/metadata.go:199

	}
	metadata, err := session.KeyspaceMetadata(schema)
	if err != nil {
		return nil, err
	}
	if metadata == nil {
		return nil, fmt.Errorf("Cassandra keyspace not found: %s", schema)
	}
	return metadata, nil
}

func (s *server) tableMetadata(schema, table string) (*gocql.TableMetadata, error) {
	keyspace, err := s.keyspaceMetadata(schema)
	if err != nil {
		return nil, err
	}
	metadata := keyspace.Tables[table]
	if metadata == nil {
		return nil, fmt.Errorf("Cassandra table not found: %s.%s", schema, table)
	}
	return metadata, nil
}

func (s *server) listDatabases() ([]databaseInfo, error) {
	metadata, err := s.allKeyspaceMetadata()
	if err != nil {
		return nil, err
	}
	names := sortedMapKeys(metadata)
	result := make([]databaseInfo, len(names))
	for index, name := range names {
		result[index] = databaseInfo{Name: name}
	}
	return result, nil
}

func (s *server) listSchemas() ([]string, error) {

View on GitHub (pinned to c0390bff16)

Solutions

  1. Refresh/reconnect so KeyspaceMetadata is re-fetched with complete partition key info
  2. Check system_schema.columns for the table to confirm the partition key columns actually exist in the cluster
  3. Upgrade or align the gocql/driver version if metadata parsing is known-buggy for your Cassandra version
  4. Manually author the DDL if the table is a system/internal object the driver cannot model

Example fix

// before
ddl, err := srv.GetTableDDL(ctx, "ks", "mv_internal") // metadata has no PartitionKey
// after
// verify first:
// SELECT column_name, kind FROM system_schema.columns WHERE keyspace_name='ks' AND table_name='mv_internal';
ddl, err := srv.GetTableDDL(ctx, "ks", "base_table")
Defensive patterns

Strategy: validation

Validate before calling

meta, err := session.KeyspaceMetadata(ks)
if err != nil || meta == nil { return err }
tbl := meta.Tables[table]
if tbl == nil || len(tbl.PartitionKey) == 0 {
	return fmt.Errorf("table %s.%s has no partition key metadata", ks, table)
}

Type guard

func hasPartitionKey(tbl *gocql.TableMetadata) bool {
	return tbl != nil && len(tbl.PartitionKey) > 0
}

Try / catch

ddl, err := srv.GetTableDDL(ctx, ks, table)
if err != nil {
	if strings.Contains(err.Error(), "no partition key") {
		// refresh metadata or hand-write DDL
		return refreshMetadataAndRetry(ctx, ks, table)
	}
	return err
}

Prevention

When it happens

Trigger: Calling GetTableDDL (or buildTableDDL) on a table whose gocql TableMetadata has an empty PartitionKey — typically when schema metadata is stale, partially loaded, or the table is a exotic/unsupported object with no resolvable partition key columns.

Common situations: Stale schema metadata after concurrent DDL changes; gocql failing to resolve partition key columns from system_schema for unusual tables (e.g. dropped-in-progress or materialized-view internals); driver version incompatibility producing incomplete metadata.

Related errors


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