如何仅在Hive中选择具有更高值的行

时间:2018-04-29 17:18:58

标签: hive hiveql

我在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中执行此操作?

2 个答案:

答案 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)。