Non frozen collections and user defined types on Cassandra 2.1.8

userNotFound picture userNotFound · Aug 12, 2015 · Viewed 10.9k times · Source

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?

Answer

Aaron picture Aaron · Aug 12, 2015

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.