Не замороженные коллекции и пользовательские типы на 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, и я думал, что эта информация может спасти кого-то несколько минут своего времени.