hive 的分组排序用法与 Impala 分组排序

hive 的分组排序用法与 Impala 分组排序

hive支持两种语法:
row_number() over( partition by 分组的字段 order by 排序的字段) as rank(rank 可随意定义表示排序的标识);
row_number() over( distribute by 分组的字段 sort by 排序的字段) as rank(rank 可随意定义表示排序的标识)

Impala 只支持 partition by

注意:
partition by 只能和order by 组合使用
distribute by 只能和 sort by 使用
**
以下是具体sql:

select * from (
select *,
row_number() over ( partition by import_data_source order by created_date desc) as num
from svc.t_coupon_info
)as rs where rs.num<=30;

上述sql意思是,根据 import_data_source 分组 ,created_date 降序排序,rs.num<=30 获取t_coupon_info 30条数据


(ps:后续sql 是对大数据量的一个优化过程)
select * from svc.t_coupon_info where coupon_no in (
select coupon_no from (
select coupon_no,
row_number() over ( partition by import_data_source order by import_data_source) as num
from svc.t_coupon_info
)as rs where rs.num<=30)

说一下大概思路:因为产线数据量过大,第一条sql 执行时间漫长,超时还未出结果,经过各种一顿操作,验证sql 如下所示:
先查询出来 索引值字段, 然后根据该值去查询我们所要的数据(简直美滋滋)

这里说明下 partition by 与 order by 同一个字段的时候,会节省一倍的时间,
当然我们也可以根据自身需求来order by 筛选字段

你可能感兴趣的:(hive)