Hive 高阶--分组窗口函数--聚合函数集成分组函数(SUM)|学习笔记

简介: 快速学习 Hive 高阶--分组窗口函数--聚合函数集成分组函数(SUM)

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段)  Hive 高阶--分组窗口函数--聚合函数集成分组函数(SUM)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/696/detail/12233


Hive 高阶--分组窗口函数--聚合函数集成分组函数(SUM)


1、聚合函数跟分组函数的配合使用聚合函数指的是输入多行输出一行,针对数据做聚集,比如常见的 sum 求和求平均最大最小等跟分组函数 over 语句配合具体例子,在讲义上做数据的准备,数据有三个字段,分别是 cookie id,创建的时间以及产生的 pv 把结构化的数据映射在 hive 构成表

2、复制建表语句打开 hive 的终端

建表语句:

create table itcast_t1(

cookieid string,

createtime string ,  --day

pv int

) row format delimited

fields terminated by ' , ' ;

在服务器上进行创建创建好表之后使用命令把数据加载到里面,如果没有,需要把结构文件进行复制,有了数据后直接使用 load 加载

load data loca1 inpath ' /root/hivedata/itcast_ t1.dat' into table itcast. _t1;

加载完后为了分析方便,用查询语句验证数据是否映射成功,数据量比较小可以不加 limit

3、如果直接对 pv 字段进行聚合,7条经过它返回的结果一条一条的结果就把所有的内容加起来返回26。

4、根据 cookie 来进行分组,将会分为一组每个组内 order by createtime再根据创建的时间正序默认的排序,从4月10号到4月16号在分组内进行 sum(pv)结果 pv1,从语法分组函数把些数据加起来,没有什么区别,但是执行结果反馈的是 pv1。执行语句

select cookieid, createtime,pv,还是原本的数据

sum(pv) over (partition by cookieid order by createtime) as pv1

from itcast_ t1;

重点看 pv1的内容执行发现它并不是直接把pv1直接加出来,而是没有具体行数据都做了 sum 求和,第一行的 sum pv1等于1,第二行是六当聚合函数跟分组函数配合使用聚合就不再是整个分组聚合而是截止操作的当前号,现在没有加其他条件约束sum 求和从第一行到当前行取第一条记录,它就是第一条加自己本身,就是一第二行就是累加一加五变成六,第三条157变成13,每一条记录的 sum 值都是当前往前所有数的累加,这是第一种情况

5、根据 cookie 分组根据 createtime 进行排序,进行分组并进行排序,第一行一直到当前行没有显示跟 pv1一样的结果pv2 计算的数跟 pv1一样默认没有写在 hive 中 rows between 语句叫 window 子句可以控制行数从哪里到哪里如果不写 window 默认是从第一行到当前行写不写 unbounded

preceding and current row 都是默认第一行

select cookieid , createtime ,pv,

sum(pv) over (partition by cookieid order by createtime rows between unbounded

preceding and current row) as pv2

from itcast_ t1;

6、没有根据创建时间分完组之后没有排序根据排序是10,11,12,13,14,15,16,意味着当没有排序时数据如果产生顺序或者顺序不一样,对结果产生改变,因此第三个没有排序,它并不是再次从当前的第一行累加到当前行,当没有排序之后,它是分组内所有的 P V 值累加,相当于普通的聚合函数,每个值都是26,不管到哪一行不再是从第一行累加到当前一行

select cookieid ,createtime ,pv,

sum(pv) over (partition by cookieid) as pv3

from itcast_ t1;

--如果每天 order by 排序语句默认把分组内的所有数据进 sum 操作

7、根据 cookieid 进行分组根据创建时间进行排序加了子句到当前行进行统计只计算当前行往前的3执行当前行记录是往前3前面4行数据跟之前一样重点是倒数第二行往前三行是7324加起来等于16,前面的51并没有计算出来所以当前行往前3行一共计算4

select cookieid,createtime ,pv,

sum(pv) over (partition by cookieid order by createtime rows between 3 preceding and

current row) as pv4

from itcast_ t1;

8、关键是理解 rows between 含也叫做 window 子句

preceding :往前

following : 往后

current row : 当前行

unbounded : 起点

unbounded preceding:表示从前面的起点

unbounded following :表示到后面的終点

select cookieid, createtime,pv,

sum(pv) over (partition by cookieid order by createtime rows between 3 preceding and

1 following) as pv5

from itcast_ .t1;

计算当前行数需要往前推三行往后加一行找到2,往前三行573,后一行4,得到21,有了 rows between window 子句可以精准的控制从哪一行开始从哪一行结束不写就是默认当前行到第一行

9、select cookieid,createtime,pv,

sum(pv) over (partition by cookieid order by createtime rows between current row and unbounded following) as pv6

from itcast. _t1;

从当前行往最后一行

10、通过的 order by partition 控制组内的排序分组结合 window 子句进行聚合,聚合函数跟默认的普通的聚合函数的行为就发生改变怎么聚合跟排序结果默认有很大的关系,把每个排序中dsc 倒序排序的结果就是另一种情况聚合函数跟分组函数的配合使用重要的是理解 window 子句的概念,再次强调 window 子句指的是 rows between 语句,它可以控制进行操作起始和结束的位置AVGMINMAX 和 SUM 用法一祥求平均值是从第一行到当前行的平均值还是往前三行,往后一行的平均值,求最大值是所有行的最大值还是当前行往前一行的最大值sum 类似,重点理解 window 子句和聚合函数配合分组函数该怎么使用

select cookieid,createtime,pv,

avg(pv) over(partition by cookieid order by createtime rows between unbounded

preceding and current row) as pv2

from itcast_t1;

select cookieid,createtime,pv,

max(pv) over (partition by cookieid order by createtime rows between unbounded

preceding and current row) as pv2

from itcast _t1;

select cookieid,createtime,pv,

min(pv) over(partition by cookieid order by createtime rows between unbounded

preceding and current row) as pv2

from itcast_t1;

相关文章
|
7月前
|
SQL 分布式计算 DataWorks
DataWorks报错问题之集成hive数据源报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
7月前
|
SQL HIVE
hive窗口函数应用实例
hive窗口函数应用实例
173 3
|
3月前
|
SQL JavaScript 前端开发
Hive学习-lateral view 、explode、reflect和窗口函数
Hive学习-lateral view 、explode、reflect和窗口函数
53 4
|
6月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
227 1
|
7月前
|
SQL HIVE
【Hive SQL 每日一题】分组排名取值
创建了一个名为`sales_data`的测试表,包含商品ID、销售额和销售日期。展示了部分示例数据。接着,提供了三个SQL查询:1) 查找每个商品销售额最高的记录;2) 获取每个商品最近和最远的销售记录;3) 求每个商品距今第二近的销售记录。每个查询都利用了窗口函数来处理数据,并给出了相应的查询结果图。
98 1
|
7月前
|
SQL HIVE 索引
Hive窗口函数案例总结
Hive窗口函数案例总结
|
7月前
|
SQL
bigdata-23-Hive窗口函数
bigdata-23-Hive窗口函数
51 0
|
7月前
|
SQL JSON 算法
hive学习笔记
hive学习笔记
|
7月前
|
SQL 分布式计算 Java
Apache Hudi与Hive集成手册
Apache Hudi与Hive集成手册
399 0
|
7月前
|
SQL 数据可视化 数据挖掘
将Sqoop与Hive集成无缝的数据分析
将Sqoop与Hive集成无缝的数据分析
下一篇
DataWorks