2021-05-28-Hive-21(求取前10%的四种方法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-05-28-Hive-21(求取前10%的四种方法)相关的知识,希望对你有一定的参考价值。

参考技术A 一般的求取前20%,就是使用两个窗口函数,如下获取

这种写法是一般的写法,当然也可以把count放在where那,来获取总的行数

hive中提供了一个非常有用的函数桶函数,把全部的数据分成5个桶获取第一个桶即可

percentile_approx / percentile -- spark
approx_percentile -- presto

kylin

percentile_approx(order_price, array(0.1,0.5,0.75,0.95),9999) over(order by order_price asc )
按照降序,获取中位数,和学过的窗口函数order by排序功能一样,局部的中位数
要想获取全局的中位数直接over()为空即可,在遇到数据倾斜可能失效,使用这个函数和前面的窗口写法获取的大差不差

这类小样本的问题是不能使用上面的三种方法的,可能有的分区只有几条数据,根本就不满足20%的条件,或者是由于样本太小,第20%不存在,还有一种就是特定需求

说一下这个需求的背景,销售排行榜上,我需要对四分位的销售者给予激励,这类销售者具备较大的潜力

有三种方法来解决这个问题,由于20%不存在,那么我们取20%-25%都是可以接受的,在窗口写法的基础上,排个序获取后几位即可,最后一种方法就是在窗口的写法上嵌套一层偏移量函数

以上是关于2021-05-28-Hive-21(求取前10%的四种方法)的主要内容,如果未能解决你的问题,请参考以下文章

sql 每个编号按时间排序取前两条数据

Oracle取前N条记录——rownum和row_number() over()的使用

SQL语句如何取前10条,10-30条记录?

实现排序取前几条数据

OPENCV求取一副图片RGB三通道均值

Python学习系列之内置函数