hive函数之炸裂函数

459 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

今天来点厉害的了,炸裂函数,其实也是分解字段的意思,就是可以将一个数据列里面的数据分离开来,可以由一列的数据生成多列和多行,将数据进行炸裂。

炸裂函数

1、explode 炸裂函数 作用:将指定数列字段拆分

常见使用方法:explode(col)

具体功能说明 :这是一个可以将列表中的数据拆分为多列的函数,可以拆的字段类型有数组或者map,拆解完毕后的结果是数组或者map中的每一个元素都能自成一行,分别使用explode(array)和explode(map)对数组和map的元素进行拆解。

当拆解的内容为map时,外面都知道map是由一个个键值对组合而成的,那么拆解后的结果就是每一对key-value为一行,key为一列,然后value也是自成一列,

explode()函数这样可以把指定的数组字段拆分降维展开为多行,就称之为炸裂函数,疯狂炸裂就对了。作用于单/多个数据行,并且产生多个数据行,以一个表作为输出。

将hive一列中复杂的array或者map结构拆分成多行。Explode函数是不允许在select再有其他字段。

explode(ARRAY) 列表中的每个元素生成一行

explode(MAP) map中每个key-value对,生成一行,key为一列,value为一列

下面例子中用到的stack函数,解释一下作用时创建一张表,使用方法是:stack(int n, v_1, v_2, …, v_k),他会将k列转换为n行,即结果是得到n条数据,每条数据就是12/4=3个字段。这里必须k是n的倍数。

-- 最简单的使用方式,array就代表数组
select explode(array) from tablename
​
​
--结合临时表
with mytable as (--Demo dataset, use your table instead of this
select stack(4, --number of tuples
'Peter',float(10),'2021-01-13',
'Peter',float(20),'2021-03-13',
'Peter',float(30),'2021-05-13',
'Peter',float(40),'2021-07-13'
) as (account_name,available_balance,date_balance)
) -- use your table instead of this CTE
 
 
select
    a.account_name
    ,a.available_balance
    ,a.date_balance
    ,new_col
from mytable a
lateral view explode(array('tt','zz','dd','ss')) data_value as new_col