当前位置: 首页 > news >正文

分析函数hive计算均值_Hive第六天——Hive函数(开窗函数之累计统计)

本文部分参考自:https://blog.csdn.net/qq_23897391/article/details/100558433

Hive第六天——Hive函数

自己的话:千里之行,始于足下。

每天都要保持前进,我势必要有强劲的实力,再跟明天的自己问好。

开窗函数:累计统计

这类函数叫法很多,包括分析函数、窗口函数、开窗函数、分析窗口函数,其实说的都是一类函数

一、开窗函数简介

开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。

二、开窗函数语法

1.开窗函数的语法为:

over(partition by 列名1,列名2 …… order by 列名3,列名4 …… [desc])

括号中的两个关键词partition by 和order by 可以只出现一个。

partition by 和order by 后面的列名可以根据需求设定任意数量个列名。

order by后面可以选择是否跟desc,加上为倒序排序(从大到小),不加则默认为从小到大排序。

over() 前面是一个函数。

2.分段解析:

sum(columns) over (partition by col1 order by col2 rows between n/unbounded preceding and m following/current row )

如果不指定rows between,默认为从起点到当前行;

如果不指定order by,则将分组内所有值累加;

关键是理解rows between含义,也叫做window子句:

preceding:往前

following:往后

current rows:当前行

unbounded:起点

unbounded preceding:表示从前面的起点

unbounded following:表示到后面的终点

三、开窗函数分类

在Hive中开窗函数按功能主要分为以下四类:

组内累计统计

组内排序

组内层次查询

组内偏移关联

四、组内累计统计开窗函数

Hive中提供了很多分析函数,用于完成负责的统计分析。先看看基础的sum,avg,min,max,用于实现分组内所有和连续累计的统计。

数据准备:

新建test.txt文件,输入如下的三列数据,以空格分隔。第一列是月份,第二列代表商铺名称,第三列代表该商铺该月营业额(万元)。

[root@hadoop ~]# vim test.txt

2019-01 a 10

2019-02 a 20

2019-03 a 30

2019-01 b 10

2019-02 b 20

2019-03 b 30

在hive中新建表temp_test9,将test文件中的数据插入,查看数据。

hive >CREATE TABLE temp_test9 (

>month STRING comment '月份',

>shop STRING comment '商铺名称',

>money STRING comment '营业额(万元)')

>row format delimited

>fields terminated BY ' ';

load data local inpath '/root/test.txt' into table temp_test9;

select * from temp_test9;

temp_test9.monthtemp_test9.shoptemp_test9.money

2019-01a10

2019-02a20

2019-03a30

2019-01b10

2019-02b20

2019-03b30

1.累计求和 sum(xx) over

(1)求商店a每个月从1月累计到该月的总营业额,即:

1月的数据是1月的营业额

2月的数据是1月+2月的营业额

3月的数据是1月+2月+3月的营业额

hive >SELECT month,SUM(MONEY) OVER

>(ORDER BY month --按照月份进行排序,然后默认从起点行到当前行做累计求和) AS money_leiji

>FROM temp_test9

>WHERE shop = 'a'; --开窗函数不用写group by

结果:

monthmoney_leiji

2019-0110.0

2019-0230.0

2019-0360.0

(2)同时求出商店a、b每个月从1月累计到该月的总营业额

hive >SELECT shop,month,SUM(MONEY)

>OVER (PARTITION BY shop ORDER BY month --先按照shop进行分组,然后每个组内再按照月份进行排序,最后默认从起点行到当前行做累计求和)

>AS money_leiji

>FROM temp_test9;

结果:

shopmonthmoney_leiji

a2019-0110.0

a2019-0230.0

a2019-0360.0

b2019-0110.0

b2019-0230.0

b2019-0360.0

1、累计统计,遇到重复行时不累加

sum(count(*)) over(order by count(*) desc )

2、累计统计,遇到重复行时也累加

sum(count(*)) over(order by count(*) desc rows between UNBOUNDED PRECEDING and current row )

2.累计求平均值 avg(xx) over

其他的开窗函数和求和的累计逻辑都是相同的。

举例:

同时求出商店a、b每个月从1月累计到该月的平均营业额

hive >SELECT shop,month,AVG(MONEY) OVER

>(PARTITION BY shop ORDER BY month --先按照shop进行分组,然后每个组内再按照月份进行排序,最后默认从起点行到当前行做累计求均值)

>AS money_leiji

>FROM temp_test9;

结果:

shopmonthmoney_leiji

a2019-0110.0

a2019-0215.0

a2019-0320.0

b2019-0110.0

b2019-0215.0

b2019-0320.0

3.累计求最大值 max(xx) over

举例:

同时求出商店a、b每个月从1月累计到该月的营业额最大值

hive >SELECT shop,month,MAX(MONEY)

>OVER (PARTITION BY shop ORDER BY

>month --先按照shop进行分组,然后每个组内再按照月份进行排序,最后默认从起点行到当前行做累计求最大值)

>AS money_leiji_max

>FROM temp_test9;

结果:

shopmonthmoney_leiji_max

a2019-0110

a2019-0220

a2019-0330

b2019-0110

b2019-0220

b2019-0330

4.累计求最小值 min(xx) over

举例:

同时求出商店a、b每个月从1月累计到该月的营业额最小值

hive >SELECT shop,month,MIN(MONEY)

>OVER (PARTITION BY shop ORDER BY month --先按照shop进行分组,然后每个组内再按照月份进行排序,最后默认从起点行到当前行做累计求最小值)

>AS money_leiji_min

>FROM temp_test9;

结果:

shopmonthmoney_leiji_min

a 2019-0110

a 2019-0210

a 2019-0310

b 2019-0110

b 2019-0210

b 2019-0310

相关文章:

  • 蓝卡攻略_剑与远征:4.18版本的新手攻略,崛起的三巨头
  • 关抢占 自旋锁_Linux学习第28节,什么是自旋锁?内核是如何设计,如何实现它的...
  • 2019pro与air怎么选_iPad Air 2019 VS iPad Pro 10.5 | 普通人的角度简单思考
  • mysql安装教程与启动_MySql安装启动两种方法教程详解
  • apparmor mysql_Ubuntu 上更改 MySQL 数据库数据存储目录
  • mysql工程师需要会哪些_MySQL面试高频100问(工程师方向)
  • mysql 客户端 连接数_监控mysql上客户端的连接数
  • mysql带库名查询_MySQL优化
  • docker mysql 差8小时_docker之容器日志输出与系统时间相差8小时解决办法
  • java白盒测试问题_白盒测试项目实践经验总结(三)-返回码问题
  • 9点到17点半 cron_定时任务Quartz简单配置与cron表达式
  • python3 web服务器_python3实现微型的web服务器
  • python if else简写_python代码简写(推导式 if else for in)
  • mysql的终端窗口是什么意思_什么叫终端窗口
  • python给list添加元素_在python中正确地向ListStore添加元素
  • 08.Android之View事件问题
  • Apache的基本使用
  • C++11: atomic 头文件
  • Java知识点总结(JavaIO-打印流)
  • MySQL主从复制读写分离及奇怪的问题
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • php中curl和soap方式请求服务超时问题
  • STAR法则
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊聊redis的数据结构的应用
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 每天10道Java面试题,跟我走,offer有!
  • 前端之Sass/Scss实战笔记
  • 如何设计一个比特币钱包服务
  • 原生JS动态加载JS、CSS文件及代码脚本
  • scrapy中间件源码分析及常用中间件大全
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (南京观海微电子)——COF介绍
  • (十)c52学习之旅-定时器实验
  • (算法)Travel Information Center
  • (一) storm的集群安装与配置
  • (转)Linq学习笔记
  • (转)四层和七层负载均衡的区别
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET成年了,然后呢?
  • .NET与 java通用的3DES加密解密方法
  • .Net中间语言BeforeFieldInit
  • .NET中使用Redis (二)
  • @Validated和@Valid校验参数区别
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ C++ ] STL_list 使用及其模拟实现
  • []常用AT命令解释()
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决