我是CQL的新学习者。 我有(餐厅)表。 通过实施的“描述餐厅”,它在 restaurants table information
如何在不使用“允许过滤”的情况下运行以下查询,
select name from restaurants where borough = 'brooklyn';
要在没有“允许过滤”的情况下运行查询,有哪些必要步骤?
非常感谢。
答案 0 :(得分:5)
使用Cassandra(CQL),您需要采用基于查询的建模方法。这意味着您将需要一个专门设计用于由borough
提供查询的表。
首先要问的一个好问题是,为什么id
是您唯一的主键(在您当前的表设计中)?您是否需要支持id
进行的查询?如果没有,那么您就不需要该表。但是,由于borough
不是唯一的,因此有必要将一个附加的列聚类到您的主键定义中。
我会选择这样的东西:
CREATE TABLE stackoverflow.restaurants_by_borough (
borough text,
name text,
id int,
buildingnum text,
cuisinetype text,
phone text,
street text,
zipcode int,
PRIMARY KEY (borough, name, id)
) WITH CLUSTERING ORDER BY (name ASC, id ASC);
现在此查询将起作用:
select name from restaurants_by_borough
where borough = 'brooklyn';
它将返回每个自治市镇的数据,按name
排序。另外,如果任何两个餐厅的name
相同(布鲁克林的麦当劳可能不止一家),id
将添加到密钥的末尾以确保唯一性。