Это на самом деле не проблема запрашивая определяемого пользователем типа: представьте себе, что address
бы один столбец text
и addresses
будет содержать один адрес; (т.е. addresses TEXT
.) проблема будет такой же.
Ваша пользовательская таблица не предназначена для обработки запросов ничем иным, кроме первичного ключа, который в данном случае является ключом раздела, который является UUID
, что делает его бесполезным.
Если вы хотите запросить пользователей по имени, я бы Денормализовать (что подразумевает некоторое дублирование) и сделать users_by_name
таблицу:
CREATE TABLE users_by_name(
name TEXT,
id UUID,
addresses whatever,
PRIMARY KEY((name), id)
)
где пользователи хранятся name
(они должны быть уникальными) и результаты будут отсортированы по id
(id
- ключевая часть кластеризации первичного ключа).
То же самое для запроса по адресам:
CREATE TABLE users_by_name(
city TEXT,
street TEXT,
name TEXT,
id UUID,
PRIMARY KEY((city), street)
)
Вы можете подумать, что это не решает проблему, но это выглядит, как Вы проектировали модель данных из реляционной БД (SQL) точки зрения, это не цель с Кассандрой.
Я согласен с принятым ответом на то, что вы должны пересмотреть свою модель данных в оптимальном для Кассандры пути. В более широком смысле интеграция Cassandra с Apache Solr позволяет запрашивать непервичные ключевые поля, включая пользовательские типы: http://docs.datastax.com/en/latest-dse/datastax_enterprise/srch/srchUDT.html (ссылка руководство по конфигурированию UDT в Solr для пакета DataStax Enterprise Cassanra, который не является бесплатным). – JohnC