limit—是否有任何方法可以在cassandra分区的所有行中获得一个分数(使用udf)并将10个分数最高的结果(order by)带来?

vxqlmq5t  于 2021-06-14  发布在  Cassandra
关注(0)|答案(0)|浏览(245)

我有一个名为users\ by\ u group的表。在此表中,属于同一组的所有用户都存储在按其用户id排序的同一分区中。每个用户有2个值,value1和value2。我已经创建了一个用户定义的函数,它根据输入map变量计算用户的得分。我的问题是:我想计算分区内每个用户的得分,但只返回得分最高的10个用户。每个分区可以有超过10000个用户(行)。如果我使用limit 10,则只计算分区内10行的分数,但我希望计算分区内每个用户的分数,并检索得分最高的10个用户。有没有别的办法达到我的目标?对于每个select语句,input\ var map变量是不同的,因此不能将其存储为列。谢谢您。

CREATE TABLE users_by_group(
     group text,
    user_id uuid,
    value1 int,
    value2 int ,
    PRIMARY KEY ((group),user_id);
CREATE OR REPLACE FUNCTION score (value1 int, value2 int, input_var map<int,float>)
            RETURNS NULL ON NULL INPUT
            RETURNS float LANGUAGE java AS '
            return Float.valueOf(input_var.get(value1) + input_var.get(value2));';
SELECT score(value1, value2, {1:0.5, 2:1, 3: 0, 4:0.3, 5:1, 10:0}) as score, user_id FROM users_by_group  WHERE group='AA-B59'

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题