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谢谢!关于配置单元版本的修复和说明是正确的!非常有魅力:谢谢。非常有魅力:谢谢。