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
    
    
  • 相关阅读:
    从键盘输入10个数,计算出正数和负数的个数。
    浏览器允许的并发请求资源数 优化
    strict 严格模式
    AMD 和 CMD 的区别
    Canvas
    visual filters 滤镜 ie
    ie 如何判断正在执行的脚本
    async
    富文本编辑器
    检测CSS属性 是否支持
  • 原文地址:https://www.cnblogs.com/xiongmozhou/p/10713138.html
Copyright © 2011-2022 走看看