Hive分析函数row_number() 【分组topk】

来源:互联网 发布:喜剧电影推荐知乎 编辑:程序博客网 时间:2024/05/18 01:39
摘要
本文根据实际业务需求展示了Hive分析函数row_number()的用法。

http://my.oschina.net/jackieyeah/blog/681274

业务背景

最近有一个需求是给用户浏览的商品进行评分, 然后将商品评分按降序排序, 最后取 Top 50 推荐给终端用户。评分的计算公式为: 该商品一个月内的购买次数 / 该商品两个月内的浏览次数。在实现该需求的时候就用到了 Hive 中内置的分析函数 row_number()。

row_number()函数简介

row_number() 函数的简单用法如下:

ROW_NUMBER() OVER (DISTRIBUTE BY COLUMN_A SORT BY COLUMN_B ASC/DESC)

说明: DISTRIBUTE BY COLUMN_A 的意思是按照 COLUMN_A 进行分组, SORT BY COLUMN_B 的意思是按照 COLUMN_B 进行排序, 后面跟着 ASC/DESC 指定是按照升序还是降序排序。row_number() 按指定的列进行分组生成行序列, 从 1 开始, 如果两行记录的分组列相同, 则行序列+1。

需求实现

数据表 user_item_score 结构大致如下:

user_iditem_iditem_scoreU_AAAAI_AAA10.5U_BBBBI_BBB10.3U_AAAAI_AAA20.6U_CCCCI_CCCC0.7U_AAAAI_AAA30.55U_BBBBI_BBB20.4

实现 SQL 如下:

select user_id, item_id, item_score from (    select *, row_number() over ( distribute by user_id sort by item_score desc) rownum from user_item_score) tempwhere rownum <= 50;

最终结果如下:

user_iditem_iditem_scorerow_numU_AAAAI_AAA20.61U_AAAAI_AAA30.552U_AAAAI_AAA10.53U_BBBBI_BBB20.41U_BBBBI_BBB10.32U_CCCCI_CCCC0.71
0 0
原创粉丝点击