如何在没有“允许过滤”的情况下在CQL中进行条件查询?

时间:2019-04-24 14:51:36

标签: cassandra cql

我是CQL的新学习者。 我有(餐厅)表。 通过实施的“描述餐厅”,它在 restaurants table information

如何在不使用“允许过滤”的情况下运行以下查询,  select name from restaurants where borough = 'brooklyn';

要在没有“允许过滤”的情况下运行查询,有哪些必要步骤?

非常感谢。

1 个答案:

答案 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将添加到密钥的末尾以确保唯一性。