文章目录

  • 一、窗口函数概念
  • 二、语法及常用函数
    • 2.1语法
    • 2.2窗口函数的特征
    • 2.3窗口函数的分类
      • 2.3.1排序
      • 2.3.2聚合
      • 2.3.3分析
      • 2.3.4窗口定义

一、窗口函数概念

窗口函数是一组特殊函数,通过扫描多个输入行来计算每个输出值,为每行数据生成一行结果,可以通过窗口函数来实现复杂的计算和聚合。窗口函数也称为OLAP(Online Analytical Processing)函数,是对一组值进行操作,不需要使用Group by子句对数据进行分组,还能在同一行返回原来行的列和使用聚合函数得到的聚合列。

二、语法及常用函数

2.1语法

Function (arg1,..., arg n) OVER ([PARTITION BY <...>] [ORDER BY <....>] [<window_clause>])

函数子句:指明具体操作,如sum 求和,first_value 取第一个值;
partition by子句:指明分区字段,如果没有,则将所有数据作为一个分区;
order by子句:指明了每个分区排序的字段和方式,也是可选的,没有就是按照表中的顺序;
窗口子句:指明相对当前记录的计算范围,可以向上(preceding),可以向下(following) 可以使 用between指明,上下边界的值,没有的话默认为当前分区

2.2窗口函数的特征

①聚合函数可以作为窗口函数使用
②具有计算和取值的功能
③不改变记录数

2.3窗口函数的分类

2.3.1排序

ROW_NUMBER()
对所有数值输出不同的序号,序号唯一连续
RANK()
对相同数值,输出相同的序号,下一个序号跳过(1,1,3)
DENSE_RANK()
对相同数值,输出相同的序号,下一个序号连续(1,1,2)
NLITE(n)
将有序的数据集合平均分配到n个桶中, 将桶号分配给每一行,根据桶号,选取前或后 n分之几的数据
PERCENT_RANK()
(目前排名- 1)/(总行数- 1),值相对于一组值的百分比排名

2.3.2聚合

标准聚合函数作为窗口函数配合order by使用,可以实现累积计算。注意只有计算类的窗口函数可以实现累积计算

COUNT() 计数,可以和DISTINCT一起用
SUM():求和 sum窗口函数配合order by,可以实现累计和
AVG():平均值 avg窗口函数配合order by 可以实现累计平均
MAX()/MIN(): 最大/小值 配合order by 可以实现累计最大值、最小值
从Hive 2.1.0开始在OVER子句中支持聚合函数

2.3.3分析

CUME_DIST
小于等于当前值的行数/分组内总行数
LEAD/LAG(col,n)
某一列进行往后/前第n行值(n可选,默认为1)
FIRST_VALUE
对该列到目前为止的首个值
LAST_VALUE
到目前行为止的最后一个值

2.3.4窗口定义

窗口定义由[<window_clause>]子句描述
用于进一步细分结果并应用分析函数
支持两类窗口定义
①行类型窗口
②范围类型窗口
RANK、NTILE、DENSE_RANK、CUME_DIST、PERCENT_RANK、LEAD、LAG和ROW_NUMBER函数不支持与窗口子句一起使用

2.3.4.1 行窗口:根据当前行之前或之后的行号确定的窗口

ROWS BETWEEN <start_expr> AND <end_expr>
<start_expr>可以为下列值
UNBOUNDED PRECEDING : 窗口起始位置(分组第一行)
CURRENT ROW:当前行
N PRECEDING/FOLLOWING:当前行之前/之后n行
<end_expr>可以为下列值
UNBOUNDED FOLLOWING : 窗口结束位置(分组最后一行)
CURRENT ROW:当前行
N PRECEDING/FOLLOWING:当前行之前/之后n行

2.3.4.2 范围窗口:取分组内的值在指定范围区间内的行

该范围值/区间必须是数字或日期类型
目前只支持一个ORDER BY列
RANGE BETWEEN 500 PRECEDING AND 1000 FOLLOWING
– 假设当前close值为3000,语句将包含分区内范围从值为2500到4000的行

hive 窗口函数--常用函数介绍相关推荐

  1. Hive学习之路(四):Hive内置函数介绍与实现WordCount

    内容简介 一.Hive内置函数介绍 二.Hive常用内置函数介绍 1.数值计算函数 2.字符串操作函数 3.日期函数 4.聚合函数 5.表生成函数 三.使用Hive函数完成WordCount 1.创建 ...

  2. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  3. php spl函数,PHP SPL标准库中的常用函数介绍

    这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...

  4. R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree

    R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal.fa.fa.parallel.factor.plot.fa.diagram.scree 目录

  5. oracle常用函数number,Oracle 常用函数介绍

    Oracle常用函数介绍,包括日期函数.类型转换函数 常用日期函数 1.add_months()函数可以得到指定日期之前或之后n个月的日期 date_value:=add_months(date_va ...

  6. Pandas入门之常用函数介绍

    一.Pandas简介 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. pan ...

  7. (转)postgis常用函数介绍(一)

    http://blog.csdn.net/gisshixisheng/article/details/47701237 概述: 在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,po ...

  8. mysql ceil,MySQL常用函数介绍

    前言: MySQL数据库中提供了很丰富的函数,比如我们常用的聚合函数,日期及字符串处理函数等.SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQL数 ...

  9. 在大数据世界里打小怪之Hive的常用函数

    Hive的数学函数包含两种,一种是内嵌函数,一种是由java定义的自定义函数. 对于不懂Java的数据分析师,掌握Hive的内嵌函数就显得尤为重要啦~ Hive内嵌函数都有哪些? 内嵌函数包括内置函数 ...

最新文章

  1. V-rep对UR3机械臂仿真路径规划
  2. Python学习笔记:类
  3. 【数据结构】线性表的顺序存储结构(c语言实现)
  4. HDFS应用场景、部署、原理与基本架构
  5. 子弹创建及发射 Learn Unreal Engine (with C++)
  6. 指针右左法则----复杂指针解析
  7. Go Concurrency Patterns: Context
  8. SimpleDet: 一套简单通用的目标检测与物体识别框架
  9. MySQL关联查询时,我们为什么建议小表驱动大表?
  10. 传智播客扫地僧C/C++学习 数据类型的本质
  11. 疯狂Python练习题
  12. 【代码块】Android代码执行ADB指令
  13. matlab做瑞利信道仿真,瑞利信道仿真 matlab - 范文中心
  14. Ionicons - Ionic 出品的免费开源、高性能图标库,适用于 web / APP / 桌面应用
  15. nb-iot和4G各有什么优势
  16. SpringBoot整合Validation进行参数校验
  17. 水溶性CdTe/CdSe/ZnS量子点荧光波长620nm-820nm
  18. 《微信公众平台应用开发实战(第2版)》一1.1 微信公众账号的注册
  19. 你所厌恶的正是别人渴望的
  20. 朴素贝叶斯分类器及西瓜判定实例

热门文章

  1. Linux系统获取CPU温度
  2. 详解IP分片与TCP分段的区别
  3. 作为前端开发,我为何疯狂推荐WebStorm?
  4. IP网络控制器架构与关键技术
  5. 图书馆管理系统用户调研
  6. Soul Dance
  7. 基于FDC2214传感器的手势识别装置(MSP430)
  8. AW9523 linux 按键驱动解析
  9. scanf(),printf()以及fscanf(),fprintf()的返回值
  10. TYPEC线改成OTG线制作