有没有办法在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;
答案 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客户端等