Есть ли способ получить оценку (с помощью UDF) во всех строках раздела Cassandra и получить 10 результатов с наибольшим количеством очков (ORDER BY)? - PullRequest
1 голос
/ 09 октября 2019

У меня есть таблица с именем users_by_group. В этой таблице все пользователи, принадлежащие к одной и той же группе, хранятся в том же разделе, упорядоченном по его user_id. У каждого пользователя есть 2 значения, значение1 и значение2. Я создал пользовательскую функцию, которая вычисляет оценку пользователя на основе входной переменной карты. Моя проблема: я хочу вычислить оценку каждого пользователя в разделе, но вернуть только 10 пользователей с самым высоким результатом. Каждый раздел может иметь более 10000 пользователей (строк). Если я использую ограничение 10, оценка рассчитывается только для 10 строк внутри раздела, но я хочу рассчитать ее для каждого пользователя внутри раздела и получить 10 пользователей с наивысшей оценкой. Есть ли другой способ получить мою цель? Переменная карты input_var различна для каждого оператора select, поэтому ее нельзя сохранить в виде столбца. Спасибо.

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' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...