hiveグループ並び替えtop Nを取る

3903 ワード

pig      TOP n。     

hive     ,         ,   udf  。            :
 row_number,       。               ,      
select a.*
from(   
    select   ,  ,  ,count/sum/  () as num row_number() over (partition by   ,   order by num desc ) rank
    from table_name
    where   ,       
    group by   ,  ,  
    )a
where a.rank<=10
実は並べ替えには3つの関数(1)があります。number:並べ替えの後、同じ項目は先着順に並べ替えて、1、2、3、4、5(2)のrank:並べ替えの後、データが同じ項目に会った時、番号は一致しています。後ろの方は1位を残しています。例えば、1、2、2、4、4、6
dense_rank:データが同じ項目に会った時、番号は一致しています。1、2、2、3、4、5のように空席は残していません。
具体的な用例を参照してください。http://www.cnblogs.com/dycg/p/4260283.html
自分で設計したコード
##    ,        
select b.*
from
(select country,
    province,
    city,
    cnt,
    row_number() over (partition by country,province order by cnt desc) rank
from 
    (select country,
            province,
            city,
            count(1) as cnt
    from tb_pmp_region_report_hive_mapping
    where country = '  '
    group by country,province,city
    ) a
)b
where b.rank<=3
表aは基本データを統計して、aから順位項目を追加します。次に、順位項目でフィルタリングします。内部group後、外部にgroup byは必要ありません。
      ,     ,     group。
   group,  row_number  order by    group    ,    ,       
select b.*
from
(select country,
    province,
    city,
    cnt,
    row_number() over (partition by country,province order by cnt desc) rank
from 
    (select country,
            province,
            city,
            count(1) as cnt
    from tb_pmp_region_report_hive_mapping
    where country = '  '
    group by country,province,city
    ) a
    group by country,province,city
)b
where b.rank<=3
実行エラー:FAILE D:Semant ticException Failed to breakp Windowing invocations into Grops.At least 1 group must only depend on on Columns.Also check for circear dependenes ci.Underror:org.appheopement.aphance.ement