sql - 如何通过运算符(operator)从 Hive 组中获取元素数组/包?

标签 sql hadoop hive apache-pig bigdata

我想按给定字段分组并获得包含分组字段的输出。以下是我要实现的目标的示例:-

假设一个名为“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/

相关文章:

SQL替换查询

hadoop - map task 的输入拆分正在运行其他 map task

mysql - 在 HIVE 连接查询中获取具有意外值的重复行

date - 在 hive 表中创建具有日期数据类型的列

hadoop - HIVE-将选择语句的结果作为多个记录插入到配置单元表中,而不会覆盖现有内容

mysql - GROUP BY 和 ORDER BY 不能一起工作

mysql - 使用MySQL函数格式化列名

hadoop - Spark 流是否适用于 "cp"和 "mv"

flutter - 配置单元registerAdapter不接受ID

sql - 从存储过程将数据插入临时表