Hive中分析函数的使用


前言

Hive中也支持分析函数(也叫窗口函数)的使用,数据开发中使用分析函数的情况非常之多,可以极方便的得到想要的数据呈现,便于分析。


一、常用的分析函数

ROW_NUMBER() 从1开始,按照顺序,生成分组内记录的序列,不会产生重复排名,若根据排序条件有相同的,则进行随机排序。1 2 3 4 5…
RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位,1 2 2 4 5
DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位,1 2 2 3 4

二、分析函数的应用

1.两张数据表

数据如下:

表:articles

id      title
1       法律
2       农业
3       科技
4       金融

表:visit_info

visitor    dates       id
张三    2020/11/20      1
张三    2020/11/22      1
李四    2020/11/25      2
张三    2020/11/21      3
李四    2020/11/23      1
王五    2020/11/26      1
李四    2020/11/27      4
王五    2020/11/28      2

2.需求场景

现在想要查询出访问量最高的两个title,打印出visitor,id和title信息

select p1.visitor
      ,p2.title
      ,p1.id 
      ,p1.cnt1
  from (select t.visitor,
               t.id,
               t.cnt1,
               dense_rank() over(order by cnt1 desc) as rn
          from (select visitor, id, count(1) over(partition by id) as cnt1
                  from visit_info) t) p1
  left join articles p2
    on p1.id = p2.id
 where p1.rn <= 2;

查询结果:

visitor      title       id     cnt1
王五          法律        1       4
张三          法律        1       4
张三          法律        1       4
李四          法律        1       4
王五          农业        2       2
李四          农业        2       2

可以简单验证,id为1的访问量有四条,id为2的有两条,其他只有一条,所以访问量最高的就是id为1和2,即title为法律和农业的,同时带出visitor 和 title 即可。


附上几个相关的博文:
https://blog.csdn.net/sunnyyoona/article/details/56484853
https://blog.csdn.net/cnham/article/details/6101199

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值