在这个例子中:
CREATE TYPE address (
street text,
city text,
zip_code int,
phones set<text>
)
CREATE TABLE users (
id uuid PRIMARY KEY,
name text,
addresses map<string, address>
)
如何使用city = newyork
查询用户或查找具有特定电话号码的用户。
答案 0 :(得分:3)
这不是查询用户定义类型的问题:假设address
是一个text
列,而addresses
将包含一个地址(即。{ {1}});问题是一样的。
除了主键之外的其他任何内容都不能查询您的用户表,在这种情况下,主键是分区键,它是addresses TEXT
,这使得它几乎无用。
如果您想按名称查询用户,我会反规范化(这意味着一些重复)并制作一个UUID
表:
users_by_name
用CREATE TABLE users_by_name(
name TEXT,
id UUID,
addresses whatever,
PRIMARY KEY((name), id)
)
存储用户(它们应该是唯一的),并且将按name
排序检索结果(id
是主键的群集键部分)。
按地址查询也是如此:
id
您可能认为它并没有真正解决您的问题,但看起来您从关系数据库(SQL)的角度设计了数据模型,这不是Cassandra的目标。