Hive 窗口函数

Hive 窗口函数

Hive窗口函数主要用于:
  1. 对数据集来分区排序
  2. 动态Group by
  3. 层次查询
  4. 选取Top N、Tail N的记录

主要分析函数:
1、RANK():
     返回数据项在分组中的排名,排名并列则留空,即排名一、二为1,排名三位3
     EG:
select user_id,cook_id,create_time,RANK() OVER(partition by user_id order by create_time DESC) from dg_cook
此Hql将每个用户分区,每个用户所有上传的菜谱作为一个小分区,小分区内对create_time进行倒序排列

2、DENSE_RANK()
     返回数据项在分组中的排名,排名并列则继续,即排名一、二为1,排名三位2
     用法与RANK()类似,不再赘述,唯一区别在排名的重复性上

注:在使用RANK()、DENSE_RANK()过程中,OVER中的 order by 会默认:DESC时 NULL值排在首位,ASC时NULL值排在末位

3、ROW_NUMBER()
     返回数据项在分组中的编号,每个分组编号从1开始累加。
    EG:
select user_id,cook_id,create_time,ROW_NUMBER() OVER(partition by user_id order by create_time DESC) from dg_cook


4、NTILE()
     按层次查询,返回N/M的数据,即把总数据集分为M份,返回前N份
     EG
select tmp.user_id,tmp.cook_id,tmp.create_time
from (
     select user_id,cook_id,create_time,NTILE(5) OVER(partition by user_id order by create_time) as sort_num from dg_cook
) tmp where sort_num = 1
此查询将数据均分成5份,取前20%

你可能感兴趣的:(Hive)