【数仓】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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容