我想按给定的字段分组,并获得带有分组字段的输出。以下是我要达到的目标的示例:-
想象一下一个名为“ sample_table”的表,其中有两列,如下所示:
F1 F2 001 111 001 222 001 123 002 222 002 333 003 555
我想编写Hive Query,它将提供以下输出:-
001 [111, 222, 123] 002 [222, 333] 003 [555]
在Pig中,可以通过以下方式很容易地实现这一目标:
grouped_relation = GROUP sample_table BY F1;
有人可以建议Hive是否有一种简单的方法吗?我能想到的是为此编写一个用户定义函数(UDF),但这可能是一个非常耗时的选择。
内置的聚合函数collect_set(在此处加倍)几乎可以满足您的需求。它实际上将在您的示例输入中起作用:
collect_set
SELECT F1, collect_set(F2) FROM sample_table GROUP BY F1
不幸的是,它也删除了重复的元素,我想这不是您想要的行为。我觉得这很奇怪collect_set,但是没有版本可以保留重复项。显然有人在想同样的事情。看起来上面的答案和第二个答案将为您提供所需的UDAF。