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
- Refresh/reconnect so KeyspaceMetadata is re-fetched with complete partition key info
- Check system_schema.columns for the table to confirm the partition key columns actually exist in the cluster
- Upgrade or align the gocql/driver version if metadata parsing is known-buggy for your Cassandra version
- 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
- Re-fetch keyspace metadata after DDL changes instead of caching stale TableMetadata
- Skip system/internal tables when generating DDL
- Confirm partition key columns exist in system_schema.columns for the table
- Keep driver/gocql versions compatible with your Cassandra server version
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
- Cassandra keyspace not found: %s
- materialized view %q.%q returned an empty source definition
- Object source is not supported
- Object source is not supported
- Object source is not supported
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/2d29aac99959356c.
Report an issue: GitHub.