如何使用自定义Java类在Cassandra中创建用户定义的函数?

Ven*_*nky 5 cassandra cassandra-2.0 cassandra-2.1

我无法在网上找到这个.如何在cassandra中创建自定义用户定义函数?

对于Ex:

CREATE OR REPLACE FUNCTION customfunc(custommap map<text, int>)
CALLED ON NULL INPUT
RETURNS map<int,bigint> 
LANGUAGE java AS 'return MyClass.mymethod(custommap);';
Run Code Online (Sandbox Code Playgroud)

"MyClass"是哪个类我可以在Classpath中注册?

Ash*_*lam 1

1. 首先构建包含您的类的 java 项目。请记住,您必须将包名称添加到您的类中。

例子 :

package exp;

import java.lang.Math;
import java.util.*;

public class MyClass
{
  public static Map<Integer,Long> mymethod(Map<String, Integer> data) {
      Map<Integer,Long> map = new HashMap<>();
      map.put(1, 10L);
      map.put(2, 20L);
      map.put(3, 30L);
      return map;
  }
}
Run Code Online (Sandbox Code Playgroud)

编译和构建后我有了 jartest.jar

2.将jar文件复制到所有cassandra节点的$CASSANDRA_HOME/lib目录中

3.重启所有Cassandra节点

4. 创建您的自定义函数

例子 :

 CREATE OR REPLACE FUNCTION customfunc(custommap map<text, int>) 
    CALLED ON NULL INPUT 
    RETURNS map<int,bigint>  
    LANGUAGE java 
    AS 'return exp.MyClass.mymethod(custommap);';
Run Code Online (Sandbox Code Playgroud)

现在您可以使用该功能:

cassandra@cqlsh:test> SELECT * FROM test_fun ;

 id | data
----+------------------
  1 | {'a': 1, 'b': 2}

(1 rows)
cassandra@cqlsh:test> SELECT customfunc(data) FROM test_fun ;

 test.customfunc(data)
-----------------------
 {1: 10, 2: 20, 3: 30}

(1 rows)
Run Code Online (Sandbox Code Playgroud)