【问题标题】:Hive - top n records within a groupHive - 组内的前 n 条记录
【发布时间】:2016-07-15 14:01:30
【问题描述】:

我目前正在使用 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]

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

谁能帮忙?

提前致谢。

添加评论

【问题讨论】:

    标签: hiveql rank top-n


    【解决方案1】:

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

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

    有关如何使用排名功能的更多信息,您可以参考documentation

    【讨论】:

    • 谢谢 - 问题现已解决。
    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 2017-05-04
    • 2019-01-23
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多