Hive 如何仅在配置单元中拾取值较高的行

Hive 如何仅在配置单元中拾取值较高的行,hive,hiveql,Hive,Hiveql,我在配置单元中有以下按计数列排序的数据: 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 item

我在配置单元中有以下按计数列排序的数据:

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

使用行数函数:

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
使用行数函数:

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.
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子句中的复杂表达式。请参阅。

在不进行排序的常见情况下,您可以使用以下查询:

-- 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子句中的复杂表达式不受支持。请参阅。

Solution 1。工作-非常感谢!。解决方案2中的b.x是什么?@alex arkhipov应该是ItemX,编辑:Alexander,如果我wrong@leftjoin解决方案2不起作用。获取错误:失败:SemanticException[错误10017]:第3行:28在JOIN'Count'@alex arkhipov中遇到左别名和右别名您的配置单元版本是什么?很可能是@leftjoin谢谢!关于配置单元版本的修复和说明是正确的!解决方案1。工作-非常感谢!。解决方案2中的b.x是什么?@alex arkhipov应该是ItemX,编辑:Alexander,如果我wrong@leftjoin解决方案2不起作用。获取错误:失败:SemanticException[错误10017]:第3行:28在JOIN'Count'@alex arkhipov中遇到左别名和右别名您的配置单元版本是什么?很可能是@leftjoin谢谢!关于配置单元版本的修复和说明是正确的!非常有魅力:谢谢。非常有魅力:谢谢。