使用场景:
explode就是将hive一行中复杂的array或者map结构拆分成多行。
lateral view用于和split, explode等函数一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表,这里生成的是一个虚拟表。
explode将复杂结构一行拆成多行,然后再用lateral view做各种聚合。
具体使用方法(1):
如下数据: 表名为 table_name_01 中存放两个字段,每个字段值的填充都很完整,现在需要对money字段进行拆分,脚本如下:
idmoney150,40,20230315,9
select id, money_01
from table_name_01 -- 表名
lateral view explode(split(money,’’)) table_tmp as money_01
上面的脚本中 lateral view 生成的 一个虚拟表,这个虚拟表的表名就是 table_temp,爆炸函数和split组合后生成的新字段就是 money_01
具体使用方法(2):
如下数据: 表名为 table_name_02 中存放两个字段,字段值的填充中,有空值,
如果对money字段进行拆分,就需要加上 outer 关键字,脚本如下:
idmoney150,40,202303415,9
select id, money_02
from table_name_02 -- 表名
lateral view outer explode(split(money,’’)) table_tmp as money_02
———————————————————————————————————————————
组合使用方法(3):
如下数据: 表名为 table_name_03 中存放两个字段,并对 money值进行求和输出
(1) 对下面money,进行求和输出
idmoney150,40,202303415,9
idmoney11102303424
脚本如下:
select
id,
sum(money_03) as money
from table_name_03 -- 表名
lateral view outer explode(split(money,’’)) table_tmp as money_03
group by id; -- 根据id,分组求和
版权归原作者 小蚂蚁爱吃肉 所有, 如有侵权,请联系我们删除。