Hive复杂数据类型与内置函数详解

   日期:2024-12-26    作者:hbqqyl 移动:http://oml01z.riyuangf.com/mobile/quote/51715.html
 
 
 

1.1.1列转行

Hive复杂数据类型与内置函数详解

就是把一列数据转化成多行,如下:

 

内嵌插叙

  • explode:展开

列表中的每个元素生成一行

 
  • lateral view:虚拟表

侧视图的意义是配合explode,一个语句生成把单行数据拆解成多行后的数据结果集。

解释:lateral view 会将explode生成的结果放到一个虚拟表中,然后这个虚拟表会和当前表
join,来达到数据聚合的目的。

结构解析:要进行聚合的虚拟表,lateral view explode(字段) 虚拟表名 as 虚拟表字段名

 

统计每个学生的总成绩

 

1.1.2 行转列

就是把多行数据转化成一行数据:

 
  • 准备数据
 
  • collect_set函数

它们都是将分组中的某列转为一个数组返回

 
  • 将数据写成array格式

它们都是将分组中的某列转为一个数组返回

 
  • 将数据写成array格式
 
 

有数据如下:

 

创建map类型的表

 

加载数据

 

Map格式数据查询

 

1.2.1Map列转行

使用上面的数据

explode 展开数据

 

Lateral view

Lateral View和split,explode等一起使用,它能够将一行数据拆成多行数据,并在此基础上对拆分后的数据进行聚合。

 
 
 
 

1.4.1数据准备

 
 
 
 

可以用下面两个命令查看Hive中的函数

 
 

因为Hive的核心功能和海量数据统计分析,而在统计分析时日期时间是一个非常重要的维度,所以日期函数在Hive使用中尤为重要.

 
 
 
 
 
 
 
 
 
 
 
 
  • 默认的数据库的查询都是要么详细记录,要么聚合分析,如果要查询详细记录和聚合数据,必须要经过两次查询
  • 简单的说窗口函数对每条详细记录开一个窗口,进行聚合统计的查询
  • 默认mysql老版本没有支持,在最新的8.0版本中支持, Oracle和Hive中都支持窗口函数

3.2.1 over开窗
使用窗口函数之前一般要通过over()进行开窗,简单可以写成函数+over简单的写法如下:

 

注意

  • 窗口函数是针对每一行数据的
  • 如果over中没有参数,默认的是全部结果集

需求:查询在2018年1月份购买过的顾客购买明细及总人数

 

3.2.2partition by子句

在over窗口中进行分区,对某一列进行分区统计,窗口的大小就是分区的大小
需求:查看顾客的购买明细及月购买总额

 

3.2.3 order by

order by子句会让输入的数据强制排序

 

3.2.4Window子句

 
 

3.3.1 ntile

用于将分组数据按照顺序切分成n片,返回当前切片值

例子

 

3.3.2 lag和lead函数

  • lag返回当前数据行的上一行数据
  • lead放回当前数据行的下一行数据

需求:查询顾客上次购买的时间

 

取得顾客下次购买的时间

 

3.3.3first_value和last_value

  • first_value取分组内排序后,截至到当前行,第一个值
  • last_value 分组内排序后,截至到当前行,最后一个值
 
 
  • row_number从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列
  • rank()生成数据项在分组中的排名,排名相等会在名词中留下空位
  • dense_rank()生成数据项在分组中的排名,排名相等会在名词中不会留下空位
 

准备数据多次的考试成绩

 

需求1:对每次考试按照考试成绩倒序

 

需求2:获取每次考试的排名情况

 

需求3:求每次考试的前三名


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号