如何接受列表列作为Cassandra UDF参数

时间:2018-09-20 07:04:10

标签: cassandra cassandra-3.0

我创建了一张桌子

CREATE TABLE human (chromosome text, position bigint,    
                    hg01583 frozen<set<text>>,
                    hg03006 frozen<set<text>>,
                    PRIMARY KEY (chromosome, position)
)

我创建了函数

CREATE FUNCTION process(sample list<frozen<set<text>>>)
CALLED ON NULL INPUT
RETURNS text
LANGUAGE java
AS 
$$


return leftsample==null?null:leftsample.getClass().toString()+" "+leftsample.toString();

    $$;

当我进行Issie CQL查询

  

选择人类的染色体,位置,hg01583,hg03006,过程([hg01583,hg03006]);

我遇到了这个错误

SyntaxException: line 1:80 no viable alternative at input ',' ([[hg01583],..

如何将hg01583,hg03006作为列表传递给处理功能?

1 个答案:

答案 0 :(得分:0)

将每个参数作为自己的参数,例如:SELECT chromosome, position, hg01583, hg03006, process(hg01583, hg03006) from human;

CREATE FUNCTION process(hg01583 frozen<set<text>>, hg03006 frozen<set<text>>)
  CALLED ON NULL INPUT
  RETURNS text
  LANGUAGE java AS 
  $$
    return hg01583==null? null : ...
  $$;

如果您希望它们是动态的,则不必为每一个都创建固定的列,而是使其宽行,并使用UDA将其与累加器函数进行汇总。喜欢:

CREATE TABLE human (chromosome text, position bigint,    
                    sample text,
                    value frozen<set<text>>
                    PRIMARY KEY (chromosome, position, sample)
)