需求
从某Hive Table中按照某字段的值的排名(rank)分成N组,第1组为排名前 1/N的内容,第2组为排名前1/N ~ 2/N的内容,…,依次类推。然后每组内部随着采样M条记录。
案例
某搜索引擎的搜索日志中,按照每日搜索次数降序排列搜索关键词(query),按照排名分成10组,第1组为搜索次数排名前10%的记录;第2组为搜索次数排名前10%~20%之间的记录;第3组为搜索次数排名前20%~30%之间的记录;依次类推。然后每组随机采样300条记录,共计返回3000条记录。
SQL
select query, pv, rank
from (
select query, pv, rank, ROW_NUMBER() over(partition by rank order by luck) row_num
from (
select query, pv, ntile(10) over(order by pv desc) rank, rand() luck
from bd_search_pv
where pt='${bizdate}' and length(query) > 1
) T
) TA
where row_num <= 300;