Hive-top N записей в группе


В настоящее время я использую Hive, и у меня есть таблица с полями user_id и value. Я хочу упорядочить значения в порядке убывания внутри каждого идентификатора пользователя, а затем выдавать только топ-100 записей для каждого идентификатора пользователя. Это код, который я пытаюсь использовать:

DROP TABLE IF EXISTS mytable2
CREATE TABLE mytable2 AS
SELECT * FROM 
(SELECT *, rank (user_id) as rank
FROM 
(SELECT * from mytable
DISTRIBUTE BY user_id
SORT BY user_id, value DESC)a )b
WHERE rank<101
ORDER BY rank;

Однако, когда я выполняю этот запрос, я получаю следующую ошибку:

Error while compiling statement: FAILED: SemanticException [Error 10247]:    Missing over clause for function : rank [ERROR_STATUS]

К вашему сведению - мои идентификаторы пользователей являются буквенно-цифровыми.

Может ли кто-нибудь помочь?

Заранее благодарю.

Добавить комментарий

1 2

1 ответ:

Как говорится в сообщении об ошибке, у вас есть ошибка с использованием функции ранга, попробуйте добавить over после ранга следующим образом:

....
  (SELECT *, rank (user_id) over (order by user_id) as rank
....

Для получения дополнительной информации о том, как использовать функцию ранга, вы можете обратиться к этой документации