hive的row_number数据重复时排序规则

结论:如果没用经过over()排序,默认会按照存储顺序排序,即在HDFS中的存储顺序排序

hive的排名函数

都是从1开始,生成数据项在分组中的排名。

  • row_number()。排名顺序增加不会重复;如1、2、3、4、... ...

  • RANK()。 排名相等会在名次中留下空位;如1、2、2、4、5、... ....

  • DENSE_RANK()。 排名相等会在名次中不会留下空位 ;如1、2、2、3、4、... ...

--row_numberrankdense_rank
100111
100211
100311
99442
98553
98653
97774

一般情况下row_number()函数和over连用,当存在一个或多个字段值相同(即数据重复)时,Hive会根据OVER子句中定义的ORDER BY子句里的字段进行排序。如果这些字段的值相同,Hive会继续比较后续字段,直到找到不同的字段或者所有指定的字段都比较完毕。

经过测试,如果没有排序,会按照默认存储顺序排序,也就是数据在HDFS中的hive表中的存储顺序排序

为了避免在处理数据重复时的不确定性,建议采取以下措施:

  • 确保排序稳定性:在所有可能相同的排序字段之后,包含一个唯一的字段(如id),以确保每个分组内的排序是唯一确定的。
  • 测试验证:在不同的数据集和Hive版本上测试你的窗口函数,确保它们按预期运行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值