Hive分析窗体函数之SUM,AVG,MIN和MAX

Hive中提供了非常多的分析函数,用于完毕负责的统计分析。

本文先介绍SUM、AVG、MIN、MAX这四个函数。

环境信息:

Hive版本号为apache-hive-0.14.0-bin

Hadoop版本号为hadoop-2.6.0

Tez版本号为tez-0.7.0


构造数据:

P088888888888,2016-02-10,1

P088888888888,2016-02-11,3

P088888888888,2016-02-12,1

P088888888888,2016-02-13,9

P088888888888,2016-02-14,3

P088888888888,2016-02-15,12

P088888888888,2016-02-16,3

创建表:

hive (hiveinaction)> create table windows_func

                   >(

                  >     polno string,

                  >     createtime string,

                  >     pnum int   

                   >)

                   >ROW FORMAT DELIMITED

                   >FIELDS TERMINATED BY ‘,‘

                   >stored as textfile;

导入数据到表中:

load data local inpath ‘/home/hadoop/testhivedata/windows_func.txt‘ into table windows_func;

測试:

SELECT polno,

       createtime,

       pnum,

       SUM(pnum) OVER(PARTITION BY polno ORDERBY createtime) AS pnum1, --默觉得从起点到当前行

       SUM(pnum) OVER(PARTITION BY polno ORDERBY createtime ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS pnum2,  --从起点到当前行

       SUM(pnum) OVER(PARTITION BY polno) ASpnum3, --分组内全部行

       SUM(pnum) OVER(PARTITION BY polno ORDERBY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS pnum4,  --当前行+往前3行(当前行的值+前面三行的值)

       SUM(pnum) OVER(PARTITION BY polno ORDERBY createtime ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) AS pnum5,  --当前行+往前3行+往后1行

       SUM(pnum) OVER(PARTITION BY polno ORDERBY createtime ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS pnum6 ---当前行+往后全部行

FROM windows_func;

结果:


polno


createtime


pnum


pnum1


pnum2


pnum3


pnum4


pnum5


pnum6


P088888888888


2016/2/10


1


1


1


32


1


4


32


P088888888888


2016/2/11


3


4


4


32


4


5


31


P088888888888


2016/2/12


1


5


5


32


5


14


28


P088888888888


2016/2/13


9


14


14


32


14


17


27


P088888888888


2016/2/14


3


17


17


32


16


28


18


P088888888888


2016/2/15


12


29


29


32


25


28


15


P088888888888


2016/2/16


3


32


32


32


27


27


3

凝视:

1.   假设不指定ROWS BETWEEN,默觉得从起点到当前行;

2.   假设不指定ORDER BY,则将分组内全部值累加;

理解ROWS BETWEEN含义,也叫做WINDOW子句:
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,UNBOUNDED PRECEDING表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点
其它AVG,MIN。MAX。和SUM使用方法一样。

演示AVG环境:

SELECT polno,

createtime,

pnum,

AVG(pnum) OVER(PARTITION BY polno ORDER BY createtime) AS pnum1, --默觉得从起点到当前行

AVG(pnum) OVER(PARTITION BY polno ORDER BY createtime ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS pnum2,  --从起点到当前行

AVG(pnum) OVER(PARTITION BY polno) AS pnum3, --分组内全部行

AVG(pnum) OVER(PARTITION BY polno ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS pnum4,  --当前行+往前3行(当前行的值+前面三行的值)

AVG(pnum) OVER(PARTITION BYpolno ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) AS pnum5,  --当前行+往前3行+往后1行

AVG(pnum) OVER(PARTITION BYpolno ORDER BY createtime ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS pnum6 ---当前行+往后全部行

FROM windows_func;

结果:


polno


createtime


pnum


pnum1


pnum2


pnum3


pnum4


pnum5


pnum6


P088888888888


2016/2/10


1


1


1


4.57142857


1


2


4.5714286


P088888888888


2016/2/11


3


2


2


4.57142857


2


1.666667


5.1666667


P088888888888


2016/2/12


1


1.66667


1.6667


4.57142857


1.666667


3.5


5.6


P088888888888


2016/2/13


9


3.5


3.5


4.57142857


3.5


3.4


6.75


P088888888888


2016/2/14


3


3.4


3.4


4.57142857


4


5.6


6


P088888888888


2016/2/15


12


4.83333


4.8333


4.57142857


6.25


5.6


7.5


P088888888888


2016/2/16


3


4.57143


4.5714


4.57142857


6.75


6.75


3

 

其它相似的函数就不举例了。

 

时间: 2024-10-13 12:30:52

Hive分析窗体函数之SUM,AVG,MIN和MAX的相关文章

Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK

继续介绍几个序列函数: NTILE.ROW_NUMBER,RANK和DENSE_RANK 环境信息:Hive版本号为apache-hive-0.14.0-binHadoop版本号为hadoop-2.6.0Tez版本号为tez-0.7.0 数据: P088888888888,2016-02-10,1 P088888888888,2016-02-11,3 P088888888888,2016-02-12,1 P088888888888,2016-02-13,9 P088888888888,2016-

Hive分析窗口函数(一) SUM,AVG,MIN,MAX

Hive分析窗口函数(一) SUM,AVG,MIN,MAX Hive分析窗口函数(一) SUM,AVG,MIN,MAX Hive中提供了越来越多的分析函数,用于完成负责的统计分析.抽时间将所有的分析窗口函数理一遍,将陆续发布. 今天先看几个基础的,SUM.AVG.MIN.MAX. 用于实现分组内所有和连续累积的统计. 数据准备 CREATE EXTERNAL TABLE lxw1234 ( cookieid string, createtime string, --day pv INT ) RO

聚合函数:sum,avg,max,min,count;模糊查询;排序

----聚合函数 --做计算 做统计 对null过滤:null是指不知道什么值,所以无法做计算--sum(参数):统计和--avg(参数):求平均值--max(参数):最大值--min(参数):最小值--count(参数):获取满足条件的记录数--1.获取学员总人数select COUNT(Email) from Student--2.获取最大的年龄值 年龄值越大,年龄越小 年龄值越小,年龄越大select MAX(BornDate) from Studentselect min(BornDat

聚合函数&count&sum&avg&max&min

聚合函数的最大特点是根据一组数据求出一个值.聚合函数的结果值只根据选定行中非NULL的值进行计算,NULL值被忽略. count:对于除"*"以外的任何参数,返回所选择集合中非NULL值的行的数目:对于参数"*",返回选择集合中所有行的数目,包含NULL值的行.举例:SELECT count(*) FROM tb_login; sum:求出表中某个字段取值的总和.举例:row12NULL3 SELECT SUM(row) FROM tb_book; //结果为6 剩

Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK

问题导读: 1.NTILE作用是什么? 2.按照pv降序排列,生成分组内每天的pv名次可使用哪个窗口函数? 3.RANK 和 DENSE_RANK作用是什么? 接上篇:Hive分析窗口函数(一)SUM,AVG,MIN,MAX 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. Hive版本为 apache-hive-0.13.1 注意: 序列函数不支持WINDOW子句.(什么是WINDOW子句,Hive分析窗口函数(一)SUM,

Hive之内置函数

函数分类 UDF(User Defined Function):数据一对一 UDAF(User Defined Aggreation Function):数据多对一 UDTF(User Defined Table-Generating Function):数据一对多 group by / sort by 对函数处理过的别名报错处理,假如:select f(col) as fc, count(*) as cnt from table_name group by fc; 解决方法1,套一层子查询:s

hive内置函数详解(分析函数、窗口函数)

cli命令 show functions; desc function concat; desc function extended concat;查看某个函数怎么使用的例子 nvl函数coalesce(v1,v2,...)返回参数中第一个非空值,如果所有值都为null返回null: set.cli.print.header=true; winfunc 员工 工资 标识 id  money type 关系型运算符优先级高到低为:not and orand or 优先级 select id ,mo

hive分组排序函数 分组取top10

hive分组排序函数 分组取top10 语法:row_number() over( partition by 字段a order by 计算项b desc) rank --这里rank是别名 Partition by:类似hive的建表,分区的意思 这里按字段a分区,对计算项b进行降序排序 实例: 要取top10品牌,各品牌的top10渠道,各品牌的top10渠道中各渠道的top10档期 1) 取top10品牌 Select 品牌,count/sum/其他() as num from tb_na

x86的ABI分析(函数实现原理)--part2

As we all know, function is a important concept in programming design. At this moment, I even don't know what kind of programming language can working without function. ( maybe i am new). maybe some special language can ? But this concept is very nec