zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    有关php.ini配置文件的安全设置
    零基础如何系统地学习前端开发?
    DEDE CMS 使用dede的sql标签 获取文章链接地址
    DedeCMS系统函数列表及用法详解
    日常生活中有哪些十分钟就能学会并可以终生受用的技能?(转)
    CSS-DOM
    Ajax和Hijax
    动态创建标记的三种方法
    关于最佳实践
    浅析DOM
  • 原文地址:https://www.cnblogs.com/xiongmozhou/p/10713138.html
Copyright © 2011-2022 走看看