Hive中COLLECT_SET与EXPLODE函数详解

我们来深入探讨 Hive 中这两个非常强大且常结合使用的函数:COLLECT_SET()EXPLODE()。它们分别代表了数据操作的两种完全相反的方向:“行转列”“列转行”


1. COLLECT_SET() - 聚合函数(行转列)

COLLECT_SET() 是一个聚合函数(Aggregation Function),通常与 GROUP BY 子句一起使用。它的核心作用是将一个分组(group)内的多行数据中某个字段的值,聚合到一个集合(Set)中

核心特点:
  1. 聚合(多行变一行):它将一组行中的值收集起来,合并到单个行的一個集合字段中。
  2. 去重(Set 特性):因为它返回的是一个集合,所以会自动去除重复的元素。
  3. 无序:集合内的元素顺序是不确定的,Hive 不保证收集的顺序与原数据顺序一致。
    • 如果需要保留顺序,可以考虑使用 COLLECT_LIST(),但它不去重。
  4. 返回类型:返回一个数组(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值