Hive QL - 限制每个项目的行数

时间:2012-07-31 23:06:10

标签: hadoop hql hive hiveql

如果我在where子句中列出了多个项目如何将列表中的每个项目的结果限制为N?

EX:

select a_id,b,c, count(*), as sumrequests
from table_name
where
a_id in (1,2,3)
group by a_id,b,c
limit 10000

1 个答案:

答案 0 :(得分:6)

听起来你的问题是获得每个a_id的前N个。您可以使用Hive 11中引入的窗口函数来执行此操作。例如:

SELECT a_id, b, c, count(*) as sumrequests
FROM (
    SELECT a_id, b, c, row_number() over (Partition BY a_id) as row
    FROM table_name
    ) rs
WHERE row <= 10000
AND a_id in (1, 2, 3)
GROUP BY a_id, b, c;

每个a_id最多可输出10,000个随机选择的行。如果你想要的分组不仅仅是a_id,你可以进一步分区。你也可以在窗口函数中使用order by,有很多例子可以显示其他选项。