Hive Ntile分析函数学习

NTILE(n)

  • 用于将分组数据按照顺序切分成n片,返回当前记录所在的切片值

NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)

  • 如果切片不均匀,默认增加第一个切片的分布
  • 经常用来取前30% 带有百分之多少比例的记录什么的

例子:

有下图的1000家店铺的价格数据。我们想知道,价格排名前30%的店铺的平均价格,和后70%的。

Hive Ntile分析函数学习

思路:

把店铺均匀的按价格递减顺序分成10片。然后取切片数=1,2,3的即为前30%。

sql:

-- 1 把记录按价格顺序拆分成10片
drop table if exists test_dp_price_rk;
create table test_dp_price_rk
as
select
id,
price,
NTILE(10) OVER (order by price desc) as rn
from test_dp_price; -- 2 按片取30%和70%,分别计算平均值
select
new_rn,
max(case when new_rn=1 then 'avg_price_first_30%' when new_rn=2 then 'avg_price_last_70%' end) as avg_price_name,
avg(price) avg_price
from
(
select
id,
price,
rn,
case when rn in (1,2,3) then 1 else 2 end as new_rn
from test_dp_price_rk
)a
group by new_rn;

结果展示:

Hive Ntile分析函数学习

上一篇:Spring Cloud简介


下一篇:22.jQuery(实例)