• hive求TopN语句


    ROW_NUMBER,RANK(),DENSE_RANK()

    先了解这三个之间的区别:

    Rank():1,2,2,4,5(一般用这个较多,不会影响总排名)

    Dense_rank():1,2,2,3,4,5(会影响最终排名)

    Row_number():1,2,3,4,5,6(按照行数显示)

    语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank
    partition by:类似hive的建表,分区的意思;
    order by :排序,默认是升序,加desc降序;
    rank:表示别名
    表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

    取TOPN数据

    按照国家提取TOP3

     样本数据:

    国家 城市 Visitors
    阿联酋,阿布扎比,137
    阿联酋,阿布扎比,146
    阿联酋,阿布扎比,178
    阿联酋,阿布扎比,337
    阿联酋,阿布扎比,178
    阿联酋,阿布扎比,227
    阿联酋,阿布扎比,157
    阿联酋,迪拜,144
    阿联酋,迪拜,268
    阿联酋,迪拜,103
    阿联酋,迪拜,141
    阿联酋,迪拜,108
    阿联酋,迪拜,266
    澳大利亚,悉尼,141
    澳大利亚,悉尼,122
    澳大利亚,悉尼,153
    澳大利亚,悉尼,128
    澳大利亚,墨尔本,294
    澳大利亚,墨尔本,230
    澳大利亚,墨尔本,159
    澳大利亚,墨尔本,188
    澳大利亚,堪培拉,249
    澳大利亚,堪培拉,378
    澳大利亚,堪培拉,255
    澳大利亚,堪培拉,240

    导入数据

     1 --执行下述语句
     2 hive (temp)> hive -f 'HQL/loaddata.hql'>out/tmp;  
     3 -----------------------------------------------
     4 drop table temp.tripdata;
     5 CREATE table datatable (
     6   country string,
     7   city string,
     8   Visitors int)
     9 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    10 STORED AS TEXTFILE;
    11 
    12 load data local inpath 'home/loaddata'
    13 overwrite into table temp.tripdata;
    14 ----------------------------------------------
    15 
    16 ----------------------------------------------
    17 --查看结果
    18 hive (temp)> select * from tripdata;
    19 country        city   visitors
    
    阿联酋  阿布扎比        137
    阿联酋  阿布扎比        146
    阿联酋  阿布扎比        178
    阿联酋  阿布扎比        337
    阿联酋  阿布扎比        178
    阿联酋  阿布扎比        227
    阿联酋  阿布扎比        157
    阿联酋  迪拜    144
    阿联酋  迪拜    268
    阿联酋  迪拜    103
    阿联酋  迪拜    141
    阿联酋  迪拜    108
    阿联酋  迪拜    266
    澳大利亚        悉尼    141
    澳大利亚        悉尼    122
    澳大利亚        悉尼    153
    澳大利亚        悉尼    128
    澳大利亚        墨尔本  294
    澳大利亚        墨尔本  230
    澳大利亚        墨尔本  159
    澳大利亚        墨尔本  188
    澳大利亚        堪培拉  249
    澳大利亚        堪培拉  378
    澳大利亚        堪培拉  255
    澳大利亚        堪培拉  240
    
    1 select country,city,visitors
    2 from tripdata 
    3 order by visitors desc 
    4 limit 5;
    5 
    6 country city    visitors
    
    澳大利亚        堪培拉  378
    阿联酋  阿布扎比        337
    澳大利亚        墨尔本  294
    阿联酋  迪拜    268
    阿联酋  迪拜    266
    
    

    按照国家、提取城市TOP3

     1 select a.*
     2 from (
     3 select country,city,visitors, row_number() over (partition by country order by visitors desc ) rank  
     4 from tripdata
     5 order by country,visitors desc
     6 ) a
     7 where a.rank<=3;
     8 
     9 --结果
    10 a.country       a.city  a.visitors      a.rank
    结果如下:
    澳大利亚        堪培拉  378     1
    澳大利亚        墨尔本  294     2
    澳大利亚        堪培拉  255     3
    阿联酋  阿布扎比        337     1
    阿联酋  迪拜    268     2
    阿联酋  迪拜    266     3
    
    

    按照城市提取TOP3

    1 select a.*
    2 from (
    3 select country,city,visitors, row_number() over (partition by city order by visitors desc ) rank  
    4 from tripdata
    5 order by country,city,visitors desc
    6 ) a
    7 where a.rank<=3;
    
    --结果
    a.country       a.city  a.visitors      a.rank
    澳大利亚        堪培拉  378     1
    澳大利亚        堪培拉  255     2
    澳大利亚        堪培拉  249     3
    澳大利亚        墨尔本  294     1
    澳大利亚        墨尔本  230     2
    澳大利亚        墨尔本  188     3
    澳大利亚        悉尼    153     1
    澳大利亚        悉尼    141     2
    澳大利亚        悉尼    128     3
    阿联酋  迪拜    268     1
    阿联酋  迪拜    266     2
    阿联酋  迪拜    144     3
    阿联酋  阿布扎比        337     1
    阿联酋  阿布扎比        227     2
    阿联酋  阿布扎比        178     3
    
    
  • 相关阅读:
    项目笔记:统计页面功能实现
    jquery easyui datagrid实现数据改动
    Skia图片解码模块流程分析
    TRIZ的成功案例
    基于HTML5的Web SCADA工控移动应用
    webservices系列(五)——javaweb整合Axis2及多service配置
    org.hibernate.PropertyValueException: not-null property references a null or transient value: model.
    线程池和异步线程
    [leetcode]Implement strStr()
    Python工作日类库Busines Holiday介绍
  • 原文地址:https://www.cnblogs.com/xiongmozhou/p/10713138.html
Copyright © 2020-2023  润新知