我想按给定字段分组并获得包含分组字段的输出。以下是我要实现的目标的示例:-
假设一个名为“sample_table”的表有两列,如下所示:-
F1 F2
001 111
001 222
001 123
002 222
002 333
003 555
我想编写将提供以下输出的 Hive 查询:-
001 [111, 222, 123]
002 [222, 333]
003 [555]
在 Pig 中,这可以很容易地通过这样的事情来实现:-
grouped_relation = GROUP sample_table BY F1;
有人可以建议在 Hive 中是否有一种简单的方法可以做到这一点?我能想到的是为此编写一个用户定义函数 (UDF),但这可能是一个非常耗时的选项。
最佳答案
内置聚合函数 collect_set
( doumented here ) 几乎可以满足您的需求。它实际上适用于您的示例输入:
SELECT F1, collect_set(F2)
FROM sample_table
GROUP BY F1
不幸的是,它还会删除重复的元素,我想这不是您想要的行为。我觉得 collect_set
存在很奇怪,但没有保留重复项的版本。 Someone else apparently thought the same thing .看起来顶部和第二个答案会给你你需要的 UDAF。
关于sql - 如何通过运算符(operator)从 Hive 组中获取元素数组/包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444070/