Hive - 组内的前n个记录

时间:2016-03-28 10:11:43

标签: hiveql rank top-n

我目前正在使用Hive,我有一个包含字段user_id和value的表。我想在每个user_id中按降序排序值,然后只为每个user_id发出前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]

仅供参考 - 我的UserIds是字母数字。

有人可以帮忙吗?

提前致谢。

添加评论

1 个答案:

答案 0 :(得分:0)

正如错误消息所示,您使用排名功能时出错, 尝试在排名后添加over如下:

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

有关如何使用排名功能的更多信息,请参阅此documentation