一尘不染

如何通过运算符从Hive组中获取元素的数组/袋?

sql

我想按给定的字段分组,并获得带有分组字段的输出。以下是我要达到的目标的示例:-

想象一下一个名为“ 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),但这可能是一个非常耗时的选择。


阅读 155

收藏
2021-03-17

共1个答案

一尘不染

内置的聚合函数collect_set在此处加倍)几乎可以满足您的需求。它实际上将在您的示例输入中起作用:

SELECT F1, collect_set(F2)
FROM sample_table
GROUP BY F1

不幸的是,它也删除了重复的元素,我想这不是您想要的行为。我觉得这很奇怪collect_set,但是没有版本可以保留重复项。显然有人在想同样的事情。看起来上面的答案和第二个答案将为您提供所需的UDAF。

2021-03-17