cassandracqlcql3

Non frozen collections and user defined types on Cassandra 2.1.8


I'm trying to run the following example from here

  CREATE TYPE address (
          street text,
          city text,
          zip int
      );

 CREATE TABLE user_profiles (
      login text PRIMARY KEY,
      first_name text,
      last_name text,
      email text,
      addresses map<text, address>
  );

However, when I try to create the user_profiles table, I get the following error:

InvalidRequest: code=2200 [Invalid query] message="Non-frozen collections are not
allowed inside collections: map<text, address>

Any thoughts on why this could be happening?


Solution

  • I am running 2.1.8 and I get the same error message. To fix this, you need the frozen keyword:

     CREATE TABLE user_profiles (
          login text PRIMARY KEY,
          first_name text,
          last_name text,
          email text,
          addresses map<text, frozen <address>>
      );
    

    Frozen is necessary for UDTs (for now) as it serializes them into a single value. A similar, better example for you to follow might be the one in the User Defined Type documentation. Give that a try.