目录
- 1 UDTF之explode函数
- 1.1 explode语法功能
- 1.2 explode函数的使用
- 1.3 案例:NBA总冠军球队名单
- 2 Lateral View侧视图
- 2.1 概念
- 2.2 UDTF配合侧视图使用
- 3 Aggregation 聚合函数
- 3.1 基础聚合
- 3.2 增强聚合
- 4 Window functions 窗口函数
- 4.1 窗口函数概述
- 4.2 窗口函数语法
- 4.3 案例:网站用户页面浏览次数分析
- 5 Sampling 抽样函数
- 5.1 抽样概述
- 5.2 Random随机抽样
- 5.3 Block块抽样
- 5.4 Bucket table分桶表抽样
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 
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));

1.3 案例:NBA总冠军球队名单
1.3.1 业务需求
有一份数据《The_NBA_Championship.txt》,关于部分年份的NBA总冠军球队名单:

第一个字段表示的是球队名称,第二个字段是获取总冠军的年份,字段之间以,分割;
获取总冠军年份之间以|进行分割。
需求:使用Hive建表映射成功数据,对数据拆分,要求拆分之后数据如下所示:

并且最好根据年份的倒序进行排序。
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;
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv72173