как принять столбцы списка в качестве параметра UDF Cassandra - PullRequest
0 голосов
/ 20 сентября 2018

Я создал одну таблицу

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();

    $$;

, когда я выполняю запрос CQL

ВЫБРАТЬ хромосому, положение, hg01583,hg03006, процесс ([hg01583, hg03006]) от человека;

я получил эту ошибку

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

как я могу передать hg01583, hg03006 как список для обработки функции?

1 Ответ

0 голосов
/ 20 сентября 2018

С каждым собственным аргументом, например: 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)
)
...