我们来深入探讨 Hive 中这两个非常强大且常结合使用的函数:COLLECT_SET() 和 EXPLODE()。它们分别代表了数据操作的两种完全相反的方向:“行转列” 和 “列转行”。
1. COLLECT_SET() - 聚合函数(行转列)
COLLECT_SET() 是一个聚合函数(Aggregation Function),通常与 GROUP BY 子句一起使用。它的核心作用是将一个分组(group)内的多行数据中某个字段的值,聚合到一个集合(Set)中。
核心特点:
- 聚合(多行变一行):它将一组行中的值收集起来,合并到单个行的一個集合字段中。
- 去重(Set 特性):因为它返回的是一个集合,所以会自动去除重复的元素。
- 无序:集合内的元素顺序是不确定的,Hive 不保证收集的顺序与原数据顺序一致。
- 如果需要保留顺序,可以考虑使用
COLLECT_LIST(),但它不去重。
- 如果需要保留顺序,可以考虑使用
- 返回类型:返回一个数组(Array)类型的数据。
语法:
COLLECT_SET(col)
col:需要被聚合的列名。
示例场景:
假设我们有一张员工技能表 employee_skills:
| employee_id | skill |
|---|---|
| 101 | Java |
| 101 | Python |
| 101 | Java |
| 102 | SQL |
| 102 | Hadoop |
| 103 | Spark |
我们想统计每个员工掌握的所有不重复技能。
SQL 查询:
SELECT
employee_id,
COLLECT_SET(skill) AS skills_set
FROM
employee_skills
GROUP BY
employee_id;
查询结果:
| employee_id | skills_set |
|---|---|
| 101 |

最低0.47元/天 解锁文章
1293

被折叠的 条评论
为什么被折叠?



