【问题标题】:Cassandra UDF and user inputCassandra UDF 和用户输入
【发布时间】:2016-05-19 07:20:49
【问题描述】:

我正在使用 Cassandra 2.2,但我遇到了用户定义函数的问题。

我想创建一个函数,将表的整数列作为参数,将另一个整数作为用户输入,并将这两个值相乘,如下所示:

创建或替换函数 testFunc (val int, input int)

CALLED ON NULL INPUT RETURNS int

LANGUAGE java AS 'return val * input;';

我可以像这样在两个整数列上执行函数

从 my_table 中选择 testFunc(int_column, another_int_column);

它正在工作,但是当我尝试使用以下用户输入执行它时:

从 my_table 中选择 testFunc(int_column, 3);

我收到以下异常:

SyntaxException: ErrorMessage code=2000 [CQL 查询中的语法错误] message="line 1:22 no possible alternative at input '3' (select testFunc(year, [3]...)"

是否有可能实现我正在尝试的目标,或者我应该找到另一种方法来做到这一点?

【问题讨论】:

    标签: cassandra cql udf


    【解决方案1】:

    以这种方式调用 UDF testFunc(int_column, 3) 与将 int 传递给仅采用 String(即列名)的函数参数相同,因此语法错误 no viable alternative at input '3'。不确定这是否适合您的场景,但您可以尝试以下方法:

    CREATE OR REPLACE FUNCTION testFunc (val int)
    
    CALLED ON NULL INPUT RETURNS int
    
    LANGUAGE java AS 'return val * 3;';
    

    或者在您的表中添加一个multiplier 列。

    【讨论】:

    • 感谢您的回答,我一直在寻找可以在每次调用时改变的东西,例如调用函数一次乘以 3,一次乘以 5 等等,这取决于用户需要而无需为每种情况编写一个函数。
    • 在这种情况下(即变量乘数)在应用程序级别处理它。我不认为 CQL 提供任何这样的设施。如果你想要 SPARK-SQL 可以在这种情况下工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多