【数仓】Hive数仓的explode()炸裂函数详解

我们知道数仓不满足第一范式,也就是说数仓中的字段是可再分的,不满足原子性,即DDL可以定义一个字段类型为数组。因此才有了explode()函数,用于给这个字段展开降维。

explode()可以把指定的数组字段拆分降维展开为多行。类似于UDTF函数,作用于单/多个数据行,并且产生多个数据行,以一个表作为输出。

explode()用法:

-- array是数组字段 也可以是split()函数
select explode(array) from tablename

但这样无法同时查询多列,即select name,explode(array) from table会报错。
原因时当使用UDTF函数的时候,Hive只允许对拆分字段进行访问。
要同时查询多列只能:

select  t.item, t.*  from tablename  t
lateral view explode(array)  t as item

lateral view explode() 是把要拆分的字段array拆分后以多行存储在t表中的item字段中(当然也可以另起一个临时表)。

注意lateral view explode()执行顺序是在from之后where之前,与join on同时执行,所以要紧跟在from语句后。

如果一行数据有两列需要炸裂展开,可以这样写:

select  t.item1, t.item2, t.*  from tablename  t
lateral view explode(array1)  t as item1
lateral view explode(array2)  t as item2

这样得到的行数是 n * length(array1) * length(array2)

你可能感兴趣的:(【数仓】Hive数仓的explode()炸裂函数详解)