ntile分桶的用法-查询前20%时间的订单信息

– 1)建表并且插入数据
create table first_20_of_the_time_table(
name string,
orderdate string,
cost int
);
insert overwrite table first_20_of_the_time_table values
(“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);

–2)查询下数据核实下对不对
SELECT * from first_20_of_the_time_table;

–3) 实现方法
select
name,
orderdate,
cost
from
(select
name,
orderdate,
cost,
ntile(5) over(order by orderdate) n
from
first_20_of_the_time_table)t1
where n=1
;
–4)总结
– 1⃣️、查询前20%时间的订单信息,没有特指某个用户,所以不用指定分区。
– 2⃣️、开窗里面对时间排序。
– 3⃣️、ntile进行分桶,按照时间顺序分成5份,因为这里说的是20%
– 4⃣️、先用子查询分桶,然后再进行过滤即n=1
– 5⃣️ 、ntile:把有序的数据集合平均分配到指定的数据量个桶中,将桶号分配给每一行。
– 如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。
– 6⃣️、取前30%,可以分成10份取前3.
多多交流,互相进步。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值