如何在CQL / cassandra中执行多个大于/小于条件的查询?

时间:2015-07-25 05:18:33

标签: cassandra cql cql3

我正在写一个地图应用程序。 一旦我得到了地图的边界,我就要查询数据库中的点数。 结构:

CREATE TABLE map.items (
    id timeuuid,
    type int,
    lat double,
    lng double,
    rank int
)

我希望像这样查询:

select * from map.items 
where type=1 
and (lat > 30 and lat < 35)
and (lng > 100 and lng < 110)
order by rank desc
limit 10;

新手到cassandra,请帮助或提供参考。 谢谢!

1 个答案:

答案 0 :(得分:1)

CQL只能在一个群集密钥上应用范围查询,因此您无法在CQL中直接执行此操作。

几种可能的方法:

  1. 将Cassandra与Apache Spark配对。将表读入RDD并应用过滤操作以仅保留与您要查找的范围匹配的行。然后按排名进行排序操作。然后使用collect()收集并输出前十个结果。

  2. 或者在纯Cassandra中,按纬度划分数据。例如,一个分区可能包含所有纬度的数据点&gt; = 30且&lt; 31,依此类推。然后,您的客户端将对所需的每个纬度分区(即30,31,32,33和34)进行多次查询,并对经度使用范围查询(使用经度作为聚类列)。返回结果时,保留排名最高的十行并丢弃其他行。