如何接受列表列作为cassandra udf参数

yyhrrdl8  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(347)

我创建了一个表 

  1. CREATE TABLE human (chromosome text, position bigint,
  2. hg01583 frozen<set<text>>,
  3. hg03006 frozen<set<text>>,
  4. PRIMARY KEY (chromosome, position)
  5. )

我创建了函数 

  1. CREATE FUNCTION process(sample list<frozen<set<text>>>)
  2. CALLED ON NULL INPUT
  3. RETURNS text
  4. LANGUAGE java
  5. AS
  6. $$
  7. return leftsample==null?null:leftsample.getClass().toString()+" "+leftsample.toString();
  8. $$;

当我询问cql时
从人中选择染色体,位置,hg01583,hg03006,过程([hg01583,hg03006]);
我犯了这个错误

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

如何将hg01583、hg03006作为列表传递给处理函数?

ht4b089n

ht4b089n1#

每个都有自己的论点,比如: SELECT chromosome, position, hg01583, hg03006, process(hg01583, hg03006) from human; ```
CREATE FUNCTION process(hg01583 frozen<set>, hg03006 frozen<set>)
CALLED ON NULL INPUT
RETURNS text
LANGUAGE java AS
$$
return hg01583==null? null : ...
$$;

  1. 如果希望它们是动态的,则不要为每个列创建固定的列,而是将其设为宽行,并使用uda使用累加器函数对它们进行聚合。比如:

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

展开查看全部

相关问题