我在Hive中有以下数据(按计数列排序):
ItemX ItemXX Count
----- ------ -----
item1 item11 8
item1 item12 2
item1 item13 1
item2 item21 10
item2 item22 1
item3 item31 9
item3 item32 7
item3 item33 5
我只需要过滤最大计数行。像这样:
item1 item11 8
item2 item21 10
item3 item31 9
如何在Hive QL中执行此操作?
答案 0 :(得分:3)
使用row_number()
功能:
select ItemX, ItemXX, Count
from
(
select ItemX, ItemXX, Count,
row_number() over(partition by ItemX order by Count desc) rn
from table_name
)s
where rn=1
答案 1 :(得分:1)
在常见情况下(无需排序),您可以使用以下查询:
-- 1.
SELECT a.* FROM tbl a
INNER JOIN (
SELECT ItemX, MAX(Count) Count
FROM tbl
GROUP BY ItemX
) b ON a.ItemX = b.ItemX AND a.Count = b.Count;
-- 2.
SELECT a.* FROM tbl a
LEFT OUTER JOIN tbl b
ON a.ItemX = b.ItemX AND a.Count < b.Count
WHERE b.ItemX IS NULL;
注意:第二个查询可以使用Hive 2.2.0+执行,因为在此版本之前不支持ON
子句中的复杂表达式(请参阅Hive wiki)。