大数据HiveSQL UDTF 函数 explode

本文介绍了Hive中的Explode和Lateral View功能,通过实例展示了如何利用这两个工具将复杂数据结构拆分成多行。在数据准备阶段,列举了广东省、海南省和新疆的标签信息。Explode函数用于将一列中的数组结构拆分成多行,而Lateral View与split结合使用,可以进一步对字符串进行分割,生成词频统计所需的数据格式。这种方法在大数据处理中常用于数据预处理和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、应用场景

数据准备

provice

category

广东省

南方、经济强省

海南省

热带、旅游、自由贸易

新疆

西北、沙漠、哈密瓜

需求展示:

广东省            南方
广东省            经济强省
海南省            热带
海南省            旅游
海南省            自由贸易
新疆              西北
新疆              沙漠
新疆                哈密瓜

2、Explode : UDTF 函数, 一个输入多个输出函数【炸裂函数】

功能说明:将 hive 一列中复杂的 Array 或者 Map 结构拆分成多行,即将数据打散。

3、和 lateral view【侧写表】 及 split 结合使用

Hive Lateral View

Apply table generation function, then join the function input and output together(应用表生成功能,将功能输入和输出连接在一起)

  1. 在一个复杂的SQL查询中,可以生成类似于临时的视图一样的功能;
  2. 使用LATERAL VIEW 如果视图是空值的话,那么最终不会有任何输出结果,需要使用 LATERAL VIEW OUT

LATERAL VIEW OUT

  1. will generate the result even output is null (即便输出为空,LATERAL VIEW OUTER 也会生成结果)
  2. 视图为空值,也会展示全部的结果

EXPLODE 函数的用法:

  1. 参数:接受的是一个集合
  2. 返回值:返回集合的每一个元素

使用场景示例:可以基于explode + laterval view 实现词频统计

4、Split: 将字符串分割字符串数组

5、lateral view 为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view 再把结果结合,产生一个支持别名表的虚拟表

create table tmp_provice_category as

select
    provice, category
from
(
    select '广东省' as provice, '南方、经济强省' as category
    union all
    select '海南省' as provice, '热带、旅游、自由贸易' as category
    union all
    select '新疆' as provice, '西北、沙漠、哈密瓜' as category
)

执行以下SQL:

select provice, category from tmp_provice_category

结果:

provice    category
新疆       西北、沙漠、哈密瓜
海南省     热带、旅游、自由贸易
广东省     南方、经济强省
select
    provice, category_name
from
(
    select provice, category from tmp_provice_category
)
lateral view explode (split(category, '、')) table_temp_view as category_name

结果:

provice    category_name
新疆        西北
新疆        沙漠
新疆        哈密瓜
海南省      热带
海南省      旅游
海南省      自由贸易
广东省      南方
广东省      经济强省

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不埋雷的探长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值