Search code examples
cassandranosqlcqlcqlsh

Selecting data based on specific column in user-defined type


So I have the following columnfamily with its respective types:

CREATE TYPE subudt (
    id varint,
    -- snipped --
);

CREATE TYPE udt (
    name text,
    -- snipped --
    subudt frozen <subudt>
);

CREATE COLUMNFAMILY tablename (
    id varint,
    -- snipped --
    udt frozen <udt>,
    PRIMARY KEY (id)
); 

How can I perform a select query on the name field in the udt type? I was looking around and it seems that you cannot use CREATE INDEX on the udt fields, but only on the entire user defined type itself.


Solution

  • Ideally you model the data in Cassandra based on queries it will serve. Querying for specific fields within UDT, defeats the purpose of having them combined in the first place.

    Having secondary indexes will depend on what type of query its trying to solve. The performance varies depending on different query structures explained here.

    In short, you can't create Indexes on specific fields and ideally should look at modeling the data different. Its absolutely okay to duplicate the data to serve different query patterns. Say maintaining a whole new table to serve queries based on "names" is common.