关于hiveexplode的信息

本篇文章给大家谈谈hiveexplode,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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

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

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

但这样无法同时查询多列,即select name,explode(array) from table会报错。

原因时当使用UDTF函数的时候,Hive只允许对拆分字段进行访问。

要同时虚明查询多列只能棚吵:

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

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

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

Hive函数之explode和inline

explode和inline函数可以将单列扩展成多列或者多行冲闷。

1.explode将单列扩展成多行

explode的参数可以是array还可以是map,如羡埋果是map,将生成2个字段,一个是map的键,字段名为key,一个是map的值,字段的名为:value,如下:

explode的限制,如下sql不支持:

2.inline

inline的参数形式:inline(ARRAYSTRUCT[,STRUCT])

inline一般结合lateral view使用

inline 嵌套多个struct,

还可兄判蚂以给inline的字段取别名:

Hive行转列(explode/lateral view)

explode称之为Hive爆炸函数,意思就是将一行数据炸开。

Usage:explode(array/map) explode函数传递的参数必须是一个array或者是map。

一、具体例子进行实践

现在有一张表有以下字段

需要将cureses转晌孝晌成列的形式。

二、扩展

上面可以看到表中还有一个用户ID,正常情况下肯定是用户对应课程的。正常的想法宴锋慎搭是以下的SQL

但是执行会报错

通常工作中,explode会结合laderal view使用。因为我们不可能只取explode里面的值,还要取其他的字段。

那么正常SQL应该是下面的

[img]

关于hiveexplode和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表