Hive表的分桶函数row_number()

1 篇文章 0 订阅
1 篇文章 0 订阅

需求分析
有一个需求是:给用户浏览的商品进行评分, 然后将商品评分按降序排序, 最后取 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 结构大致如下:
在这里插入图片描述
实现 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
) temp
where rownum <= 50;

最终结果如下:

在这里插入图片描述

注意:

row_number() over ( distribute by user_id sort by item_score desc) rownum

SQL中的上述部分是对分桶结果取了个别名,不取别名时也是一样的结果,row_number() over ( distribute by user_id sort by item_score desc)表示的就是分桶后的情况。

原文链接: https://blog.csdn.net/liu857279611/article/details/71194955

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值