如何在 CQL/cassandra 中执行具有多个 greater/less 条件的查询?
How to perform a query with multiple greater/less than condition in CQL/cassandra?
我正在编写一个地图应用程序。
一旦我得到地图的边界,我就必须查询数据库中的点。
结构:
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新手,请帮忙或提供参考资料。
谢谢!
CQL 只能对一个聚类键应用范围查询,因此您不能直接在 CQL 中执行此操作。
几种可能的方法:
将 Cassandra 与 Apache Spark 配对。将 table 读入 RDD 并应用过滤操作以仅保留与您要查找的范围匹配的行。然后按rank做排序操作。然后使用collect()收集并输出前十个结果。
或者在纯 Cassandra 中,按纬度对数据进行分区。例如,一个分区可能包含所有纬度 >= 30 和 < 31 的数据点,依此类推。然后,您的客户端将对所需的每个纬度分区(即 30、31、32、33 和 34)进行多次查询,并对经度使用范围查询(使用经度作为聚类列)。返回结果时,保留排名最高的十行并丢弃其他行。
我正在编写一个地图应用程序。 一旦我得到地图的边界,我就必须查询数据库中的点。 结构:
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新手,请帮忙或提供参考资料。 谢谢!
CQL 只能对一个聚类键应用范围查询,因此您不能直接在 CQL 中执行此操作。
几种可能的方法:
将 Cassandra 与 Apache Spark 配对。将 table 读入 RDD 并应用过滤操作以仅保留与您要查找的范围匹配的行。然后按rank做排序操作。然后使用collect()收集并输出前十个结果。
或者在纯 Cassandra 中,按纬度对数据进行分区。例如,一个分区可能包含所有纬度 >= 30 和 < 31 的数据点,依此类推。然后,您的客户端将对所需的每个纬度分区(即 30、31、32、33 和 34)进行多次查询,并对经度使用范围查询(使用经度作为聚类列)。返回结果时,保留排名最高的十行并丢弃其他行。