hive中有些分析函数功能确实很强大,在和sum,max等聚合函数结合起来能实现不少功能。

直接上代码演示吧

原始数据

channel1	2016-11-10	1
channel1 2016-11-11 3
channel1 2016-11-12 5
channel1 2016-11-13 6
channel1 2016-11-14 2
channel1 2016-11-15 4
channel2 2016-11-10 5
channel2 2016-11-11 3
channel2 2016-11-12 5
channel2 2016-11-13 2

创建表

CREATE TABLE test (
channel string,
createtime string, --day
pv INT
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'

语句以及结果

SELECT
channel,
createtime,
pv,
SUM(pv) OVER(PARTITION BY channel ORDER BY createtime) AS pv1,
SUM(pv) OVER(PARTITION BY channel ORDER BY createtime ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS pv2,
SUM(pv) OVER(PARTITION BY channel) AS pv3,
SUM(pv) OVER(PARTITION BY channel ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS pv4,
SUM(pv) OVER(PARTITION BY channel ORDER BY createtime ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) AS pv5,
SUM(pv) OVER(PARTITION BY channel ORDER BY createtime ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS pv6
FROM test;
pv pv1 pv2 pv3 pv4 pv5 pv6
channel1 2016-11-15 4 21 21 21 17 17 4
channel1 2016-11-14 2 17 17 21 16 20 6
channel1 2016-11-13 6 15 15 21 15 17 12
channel1 2016-11-12 5 9 9 21 9 15 17
channel1 2016-11-11 3 4 4 21 4 9 20
channel1 2016-11-10 1 1 1 21 1 4 21
channel2 2016-11-13 2 15 15 15 15 15 2
channel2 2016-11-12 5 13 13 15 13 15 7
channel2 2016-11-11 3 8 8 15 8 13 10
channel2 2016-11-10 5 5 5 15 5 8 15

分析结果,以channel1 列

pv1 结果是取起点到当前行的积累,比如:10号=10号  11号=10号+11号  12号=10号+11号+12号 以此类推

pv2 和pv1的结果是一样的。

pv3 就是分组channel的pv的聚合

pv4 就是分组内当前行向前+3 行  15号=15+14+13+12  14号=14+13+12+11  13号=13号+12号+11号 以此类推

pv5 就是分组内当前行往前+3行 往后加+1行   15号=14+13+12+11  14号=14号+13号+12号+11号+15号 以此类推

pv6 就是当前行+往后所有行

如果不指定rows between 默认为从起点到当前行  如果不指定order by 默认则将分组内累加

PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点

hive中分析函数window子句的更多相关文章

  1. Hive 窗口分析函数

    1.窗口函数 1.LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值 ...

  2. hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法

    hive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派上用场了, 先简单说下这三函数都是排名的,不过呢还有点细微的区别. 通过代码运行结果一看就明白了. ...

  3. hive窗口函数/分析函数详细剖析

    hive窗口函数/分析函数 在sql中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时 ...

  4. Hive中的窗口函数

    简介 本文主要介绍hive中的窗口函数.hive中的窗口函数和sql中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于olap分析 概念 我们都知道在sql中有一类函数叫做聚合函数,例如su ...

  5. Hive之分析函数

    目录 一.sum() over(partition by) 二.avg().min().max() over(partition) 三.row_number() over(partition by) ...

  6. hive中简单介绍分区表

    所介绍内容基本上是翻译官方文档,比较肤浅,如有错误,请指正! hive中创建分区表没有什么复杂的分区类型(范围分区.列表分区.hash分区.混合分区等).分区列也不是表中的一个实际的字段,而是一个或者 ...

  7. hive中简单介绍分区表(partition table)——动态分区(dynamic partition)、静态分区(static partition)

    一.基本概念 hive中分区表分为:范围分区.列表分区.hash分区.混合分区等. 分区列:分区列不是表中的一个实际的字段,而是一个或者多个伪列.翻译一下是:“在表的数据文件中实际上并不保存分区列的信 ...

  8. hive中 udf,udaf,udtf

    1.hive中基本操作: DDL,DML 2.hive中函数 User-Defined Functions : UDF(用户自定义函数,简称JDF函数)UDF: 一进一出  upper  lower ...

  9. HIVE中join、semi join、outer join

    补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...

随机推荐

  1. 基于Lattice_CPLD/FPGA Diamond 开发流程

         本文主要介绍了Lattice CPLD/FPGA集成开发环境的使用方法,并通过点亮开发板(Mach XO2 Breakout Board)上位号为D2的LED这一实例来演示其开发流程. 1. ...

  2. Building good docker images

    The docker registry is bursting at the seams. At the time of this writing, a search for "node&q ...

  3. System.Data.EntityState”在未被引用的程序集中定义

    类型“System.Data.EntityState”在未被引用的程序集中定义.必须添加对程序集“System.Data.Entity, Version=4.0.0.0, Culture=neu 错误 ...

  4. nginx-my

    #user nobody; 3 worker_processes 1; 4 5 error_log logs/error.log; 6 #error_log logs/error.log notice ...

  5. Serif和Sans-serif字体的区别

    在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...

  6. 理解C++的inline函数

    C++的inline函数就是编译器在编译代码时,将"对此函数的每一个调用"都以函数本体替换之,该过程发生在编译期间. inline函数的优点是,它可以省去函数调用所带来的额外开销, ...

  7. SQL2008 清除日志

    USE [master] GO ALTER DATABASE BizTest SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE BizTest SE ...

  8. PSP(11.2~11.9)

    5号 类别c 内容c 开始时间s 结束e 中断I 净时间T GUI 学习QT视频 9:00 10:10 0m 70m 复习 软件工程 10:10 11:10 10 50m 复习 软件工程 14:20 ...

  9. 将dataGridView数据转成DataTable

    如已绑定过数据源: DataTable dt = (dataGridView1.DataSource as DataTable) 如未绑定过数据源: public DataTable GetDgvTo ...

  10. Java实现购物车功能:方式一:存放在session中.方式二:存储在数据库中

    //将购物车产品加入到cookie中,方式同浏览记录.Java实现购物车,方式一(简易版):存储在session中.这种方式实现还不严谨,大家看的时候看思路即可.(1). JSP页面中,选择某一款产品 ...