2016-03-28 3 views
2

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

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] 

FYI - Мои UserIds являются буквенно-цифровой.

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

Заранее спасибо.

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

ответ

0

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

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

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

+0

Спасибо - вопрос теперь отсортирован. – Maeve90

 Смежные вопросы

  • Нет связанных вопросов^_^