Hive中的 NTILE(n) 函数专讲

文章目录

数据准备

字段:name,orderdate,cost

jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
jack,2017-01-08,55
mart,2017-04-08,62
mart,2017-04-09,68
neil,2017-05-10,12
mart,2017-04-11,75
neil,2017-06-12,80
mart,2017-04-13,94

建表语句

create table business(
name string,
orderdate string,
cost int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';


load data local inpath "/opt/module/data/business.txt" into table 
business;

需求

查询前 20%时间的订单信息。

NTILE(n):把有序窗口的行分发到指定数据的组中,各个组有编号,编号从 1 开始,对
于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。

需求分析。
把所有的数据分成五份,每一份就是20% ,然后将分好的五份拿出一份即可

第一步:将数据分成五份

select *,ntile(5) over(order by orderdate) sorted from business; 

结果如下

Hive中的 NTILE(n) 函数专讲
第二步:将sorted 等于 1 即可,便是求出20%时间的订单信息

select * from (
 select name,orderdate,cost, ntile(5) over(order by orderdate) sorted
 from business
) t
where sorted = 1;

结果如下

Hive中的 NTILE(n) 函数专讲

END

上一篇:SQL累加常见的三种方法


下一篇:invalid comparison: java.util.Date and java.lang.String