目录



1 UDTF之explode函数

1.1 explode语法功能

对于UDTF表生成函数,很多人难以理解什么叫做输入一行,输出多行。

为什么叫做表生成?能够产生表吗?下面我们就来学习Hive当做内置的一个非常著名的UDTF函数,名字叫做explode函数,中文戏称之为“爆炸函数”,可以炸开数据

explode函数接收map或者array类型的数据作为参数,然后把参数中的每个元素炸开变成一行数据。一个元素一行。这样的效果正好满足于输入一行输出多行。

explode函数在关系型数据库中本身是不该出现的。

因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分)。本身已经违背了数据库的设计原理,但是在面向分析的数据库或者数据仓库中,这些规范可以发生改变。

explode(a) - separates the elements of array a into multiple rows, or the elements of a map into multiple rows and columns 大数据Hive函数高阶_big data

explode(array)将array列表里的每个元素生成一行;

explode(map)将map里的每一对元素作为一行,其中key为一列,value为一列;

一般情况下,explode函数可以直接使用即可,也可以根据需要结合lateral view侧视图使用。

1.2 explode函数的使用

select explode(​​array​​(11,22,33)) as item;

select explode(​​map​​(“id”,10086,“name”,“zhangsan”,“age”,18));

大数据Hive函数高阶_big data_02

1.3 案例:NBA总冠军球队名单

1.3.1 业务需求

有一份数据《The_NBA_Championship.txt》,关于部分年份的NBA总冠军球队名单:

大数据Hive函数高阶_hive_03

第一个字段表示的是球队名称,第二个字段是获取总冠军的年份,字段之间以,分割;

获取总冠军年份之间以|进行分割。

需求:使用Hive建表映射成功数据,对数据拆分,要求拆分之后数据如下所示:

大数据Hive函数高阶_big data_04

并且最好根据年份的倒序进行排序。

1.3.2 代码实现

--step1:建表
create table the_nba_championship(
team_name string,
champion_year array<string>
) row format delimited
fields terminated by ','
collection items terminated by '|';

--step2:加载数据文件到表中
load data local inpath '/root/hivedata/The_NBA_Championship.txt' into table the_nba_championship;

--step3:验证
select *
from the_nba_championship;

更多文章请关注《万象专栏》