row_number() over partition by使用中出现的一个现象

目前仓库中有这么个需求,根据书本,科目,知识点分组,分组时按照知识点对应的章节排序,排序后只获取排名第一条的数据,因为只需要第一条,为了防止出现并列第一,这里使用hive支持的开窗函数:

row_number() over partition by

如下截图中跑出来的数据:



 

截图数据现象是这样,

partition by的字段值 subject_id,book_id, kp_id

和order by 的字段值unit_sort都一样,只不过是week不一样,

那么我的疑问是,  跑出来的数据是 hive默认将 week进行降序处理后,在其余字段值都一样, 按照week方式来给book_kp_unitsort_rank赋值的还是 这个book_kp_unitsort_rank赋值是随机的, 

扫描二维码关注公众号,回复: 228883 查看本文章

我在环境hue重跑过三四次,本以为是hue默认给排序展示给人看的,然后在hive命令行中在重跑依旧是上图结果。

写这个帖子没有结论,到现在还是不知道这个数据是 随机很巧的情况下 week=20就是排名第一还是hive的这个函数就会按照这个方式来走,

为了防止隐患(排名按照week随机给),我有更新了一把,在 order by后增加了 week desc方式;

如下:

select 
subject_id,
book_id, 
unit_id, 
unit_sort, 
kp_id, 
week , 
start_date,
row_number() over(partition by subject_id,book_id, kp_id order by unit_sort asc , week desc )  as book_kp_unitsort_rank   
from 
ods_common_book_unit_kp_schedule where day='2018-01-08'  and  subject_id in ('010', '030')  
and  kp_id is not null 
and  book_id = '010003001104100'   and kp_id in ('1015800','1015720')

希望看到帖子的朋友们,可以给我留言发表下自己的看法,谢谢

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2407320