hive窗口函数的使用

  • 前言
    • 一、hive窗口函数语法
      • 1、over()窗口函数的语法结构
        • 1.1、over()函数中的三个函数讲解
      • 2、常与over()一起使用的分析函数
        • 2.1、聚合类
        • 2.2、排名类
        • 2.3、其他类
      • 3、窗口函数总结

前言

我们在学习hive窗口函数的时候,一定要先了解窗口函数的结构。而不是直接百度sum() over()、row_number() over()、或者count() over()的用法,如果这样做,永远也掌握不到窗口函数的核心。
看了很多文章后才知道over()才是窗口函数,而sum、row_number、count只是与over()搭配的分析函数,当然除了这三个函数还有其他的函数。

一、hive窗口函数语法

在前言中我们已经说了avg()、sum()、max()、min()是分析函数,而over()才是窗口函数,下面我们来看看over()窗口函数的语法结构、及常与over()一起使用的分析函数。

  1. over()窗口函数的语法结构
  2. 常与over()一起使用的分析函数
  3. 窗口函数总结

1、over()窗口函数的语法结构

分析函数over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置)

over()函数中包括三个函数:包括分区partition by 列名、排序order by 列名、指定窗口范围rows between 开始位置 and 结束位置。我们在使用over()窗口函数时,over()函数中的这三个函数可组合使用也可以不使用。
over()函数中如果不使用这三个函数,窗口大小是针对查询产生的所有数据,如果指定了分区,窗口大小是针对每个分区的数据。

1.1、over()函数中的三个函数讲解

order by
order by是排序的意思,是该窗口中的

A、partition by
partition by可理解为group by 分组。over(partition by 列名)搭配分析函数时,分析函数按照每一组每一组的数据进行计算的。
B、rows between 开始位置 and 结束位置
是指定窗口范围,比如第一行到当前行。而这个范围是随着数据变化的。over(rows between 开始位置 and 结束位置)搭配分析函数时,分析函数按照这个范围进行计算的。
窗口范围说明
我们常使用的窗口范围是ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行),常用该窗口来计算累加。

  • PRECEDING:往前
  • FOLLOWING:往后
  • CURRENT ROW:当前行
  • UNBOUNDED:起点(一般结合PRECEDING,FOLLOWING使用)
  • UNBOUNDED PRECEDING 表示该窗口最前面的行(起点)
  • UNBOUNDED FOLLOWING:表示该窗口最后面的行(终点)
    比如说
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行)
ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING(表示往前2行到往后1行)
ROWS BETWEEN 2 PRECEDING AND 1 CURRENT ROW(表示往前2行到当前行)
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING(表示当前行到终点)

2、常与over()一起使用的分析函数

2.1、聚合类

avg()、sum()、max()、min()

2.2、排名类

row_number()按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6)
rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位(如:1、2、3、3、3、6)
dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位(如:1、2、3、3、3、4)

2.3、其他类

lag(列名,往前的行数,[行数为null时的默认值,不指定为null]),可以计算用户上次购买时间,或者用户下次购买时间。
lead(列名,往后的行数,[行数为null时的默认值,不指定为null])
ntile(n) 把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,ntile返回此行所属的组的编号

3、窗口函数总结

其实窗口函数逻辑比较绕,我们可以把窗口理解为对表中的数据进行分组,排序等计算。要真正的理解HIVE窗口函数,还是要结合练习题才行。

hive窗口函数使用相关推荐

  1. 大数据技术-hive窗口函数详解

    有不少同学一听这个标题,hive窗口函数是什么鬼?没听说过还有窗口函数这个东西啊,其实它的用处可大了,下面听小千慢慢道来. hive窗口函数 窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行) ...

  2. HiveQL学习笔记(四):Hive窗口函数

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  3. Hive 窗口函数 实现原理

    Hive 窗口函数 实现原理 hive中窗口函数的实现,主要是借助于一个叫做 Windowing Table Function 的Partitioned Table Function Partitio ...

  4. hive 窗口函数(持续更新)

    hive窗口函数语法 avg().sum().max().min()等是分析函数,而over()才是窗口函数,下面我们来看看over()窗口函数的语法结构.及常与over()一起使用的分析函数: 1. ...

  5. HIVE 窗口函数和分析函数

    **HIVE 窗口函数和分析函数** 第一篇,试试水: 一.介绍 分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行. 开窗函数指定了分析 ...

  6. Hive窗口函数之累积值、平均值、首尾值的计算学习

    Hive窗口函数可以计算一定范围内.一定值域内.或者一段时间内的累积和以及移动平均值等:可以结合聚集函数SUM() .AVG()等使用:可以结合FIRST_VALUE() 和LAST_VALUE(), ...

  7. hive 窗口函数_Datatist科技专栏 | Hive排序窗口函数速学教程!

    作者:原上野 设计:Cindy 编辑:AI君 在开发过程中经常会遇见排序的场景,比如取top N的问题,这时候row_number(),rank,dense_ran()这三个函数就派上用场了,其中,r ...

  8. hive窗口函数_Hive sql窗口函数源码分析

    在了解了窗口函数实现原理 spark.hive中窗口函数实现原理复盘 和 sparksql比hivesql优化的点(窗口函数)之后,今天又撸了一遍hive sql 中窗口函数的源码实现,写个笔记记录一 ...

  9. Hive窗口函数(over/partition by/order by/window/序列函数)总结与实践

    一.简介 本文主要介绍Hive中的窗口函数,Hive中的窗口函数和SQL中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于olap分析(在线分析处理). 二.概念 我们都知道在sql中有一类 ...

最新文章

  1. iptables时区_iptables time 时间匹配规则
  2. linux创建ftp指定目录命令行,Linux-命令行建立FTP
  3. 10 分钟入门 AST 代码优化与修改
  4. Spring实战-雇员薪资管理系统
  5. 【重识 HTML + CSS】基本 CSS 属性
  6. Nginx 代理设置
  7. 高中计算机期末工作总结,高中信息技术期末教学工作总结
  8. 老版迅雷5.8无限制经典版
  9. 信鸽 ios tag推送 php,信鸽推送平台常见问题汇总iOS端
  10. 嵌入式Linux入门指南(一)——学习路线篇
  11. 面对失败计算机科学家,面对巨大挫折,仍毫不畏惧、坚韧不拔的名人事例
  12. elasticsearch5之Elastalert 安装使用 配置邮件报警和报警模版
  13. 厄拉托塞师(Eratosthenes)筛法
  14. 最新WIN平台服务器安全解决方案【青云原创】
  15. 程序员初创公司的合伙人股权的进入和退出机制设计-20151020
  16. Shader学习之Cg语言一(Cg语言概述)
  17. 添加遮罩层,实现点击穿透,实现遮罩层按钮点击,遮罩层下层点击事件
  18. RabbitMQ 报错:connection error; (reply-code=530, reply-text=NOT_ALLOWED - XXX(Hosts名) / not found)
  19. Android之动态更换桌面图标
  20. 券商大举进入区块链研究 与原生投研机构争夺定价权

热门文章

  1. Collider组件与Rigidbody组件杂谈
  2. oracle 视图带变量条件,oracle视图(带参数)
  3. Python环境下使用MATLAB
  4. 【不同的子序列II】
  5. Linux网络配置管理
  6. C语言(void *)用法实例
  7. 【EI会议|检索稳定】2021信息、控制及自动化国际学术会议(ICICA 2021)
  8. 2020 - 04 - 30 个人笔记
  9. visual studio 2022安装vsix插件
  10. 一个事物两个方面的对比举例_对比属于修辞手法吗