Cassandra NoSQL中的Sqrt和Pow(最近邻居)

时间:2015-07-26 04:47:38

标签: cassandra maps nosql

有没有办法在Cassandra NoSQL中使用这个数学函数?我找到了下面的函数,同时寻找一种方法来获得经纬度最近的行。

SELECT latitude, longitude, sqrt(
    pow(69.1 * (latitude - [startlat]), 2) +
    pow(69.1 * ([startlng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 25 ORDER BY distance;

1 个答案:

答案 0 :(得分:0)

数学函数不是内置于CQL中的,但Cassandra 2.2中有一个新功能,称为用户定义函数,它允许您创建数学函数。我不确定你是否可以使用数学运算的结果来限制返回的行。

以下是一个例子:

cqlsh> CREATE OR REPLACE FUNCTION fLog (input double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS 'return Double.valueOf(Math.log(input.doubleValue()));';

查看更多详情here

执行此操作的更常见方法可能是在CQL之外,您可以执行map / reduce类型操作以将行映射到距离并将其减少到小于25的距离。这可以使用Spark或以编程方式使用Cassandra java客户端等