hiveグループ並び替えtop Nを取る
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、6dense_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