Не замороженные коллекции и пользовательские типы на Cassandra 2.1.8

Я пытаюсь запустить следующий пример из здесь

  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>
  );

Однако, когда я пытаюсь создать таблицу user_profiles, я получаю следующую ошибку:

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

Любые мысли о том, почему это может происходить?

Ответ 1

Я запускаю 2.1.8, и получаю то же сообщение об ошибке. Чтобы исправить это, вам понадобится ключевое слово frozen:

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

Frozen необходим для UDT (пока), поскольку он сериализует их в одно значение. Аналогичным, лучшим примером для вас может быть тот, который содержится в документации User Defined Type. Попробуйте.

Ответ 2

Незамерзшие UDT еще не поддерживаются. Причина того, что пользователь запрашивает явное определение этого ключевого слова для каждого UDT, это возможность вносить изменяемые UDT в 3.x без нарушения существующего кода.

Ответ 3

Я получал это сообщение, когда я ошибочно использовал "string" вместо "text" в карте cassandra, например:

mymap map<bigint, string> 

Я следил за этим потоком stackoverflow из google, и я думал, что эта информация может спасти кого-то несколько минут своего времени.