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

Hive窗口函数语法规则、窗口聚合函数、窗口表达式、窗口排序函数 - ROW NUMBER 、口排序函数 - NTILE、窗口分析函数

Hive窗口函数

文章目录

  • Hive窗口函数
    • 语法规则
    • 窗口聚合函数
    • 窗口表达式
    • 窗口排序函数 - ROW NUMBER
    • 窗口排序函数 - NTILE
    • 窗口分析函数

  • 窗口函数也叫开窗函数、OLAP函数
  • 其最大特点:输入值是从SELECT语句的结果集中的一行或多行的“窗口”中获取的。
  • 如果函数具有OVER子句,则它是窗口函数。
  • 窗口函数可以简单地解释为类似于聚合函数的计算函数,但通过GROUP BY子句组合的常规聚合会隐藏正在聚合的各个行,最终输出一行;窗口函数聚合后还可以访问当中的各个行,并且可以将这些行中的某些属性添加到结果集。

语法规则

  • Function(arg1,…,argn)可以是:
    1. 聚合函数:比如sum max avg等
    2. 排序函数:比如rank row_number等
    3. 分析函数:比如lead lag first_value等
  • OVER [PARTITION BY <…>] 类似于group by,用于指定分组,每个分组都可以看成窗口。如果没有指定PARTITION BY则所有行为一组。
  • [ORDER BY <…>]类似于group by,用于指定每个分组内数据排序的规则,并在每个分组内累积求和。支持ASC、DESC
  • [<window_expression>] 用于指定每个窗口中操作的数据范围,默认是窗口中所有行。
Function(arg1,...,argn) over ([PARTITION BY <...>] [ORDER BY<...>] [<window_expression>])

窗口聚合函数

  • 即sum、max、min、avg这样的聚合函数在窗口中的使用。
  • 以sum为例:
  1. 常规聚合操作:
SELECT cookieid,SUM(pv) AS total_pv FROM website_pv_into GROUP BY cookieid;
  1. 求出网站总的pv数,即所有用户的所有访问求和
SELECT cookieid,createtime,pv,SUM(pc)OVER() AS total_pv
FROM website_pv_info;
  1. 分别求每个用户pv数
SELECT cookieid,createtime,pv,SUM(pv) OVER(PARTITION BY cookieid) AS total_pv
FROM website_pv_info;
  1. 求每个用户截至当天,积累的pv数(order by在每个分组内累积求和)
SELECT cookieid,createtime,pv,SUM(pv) OVER(PARTITION BY cookieid ORDER BY createtime) AS total_pv
FROM website_pv_info;

窗口表达式

  • 在sum(…) over(partition by … order by …)语法完整的情况下,进行累积聚合操作的默认聚合行为是从第一行聚合到当前行。
  • Window expression窗口表达式给我们提供了一种控制行范围的能力,如向前两行,向后三行。
  • 关键字是ROWS BETWEEN,包括下面几个选项:
    1. preceding:往前
    2. following:往后
    3. current row:当前行
    4. unbounded:边界
    5. unbounded preceding:表示前面的起点
    6. unbounded following:表示后面的终点
  • 例:
  1. 第一行到当前行:
SELECT cookieid,createtime,pv,SUM(pv) 
OVER
(
PARTITION BY cookieid 
ORDER BY createtime 
ROW BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS total_pv
FROM website_pv_info;
  1. 向前三行至当前行:
SELECT cookieid,createtime,pv,SUM(pv) 
OVER
(
PARTITION BY cookieid 
ORDER BY createtime 
ROW BETWEEN 3 PRECEDING AND CURRENT ROW
) AS total_pv
FROM website_pv_info;
  1. 向前三行至向后一行:
SELECT cookieid,createtime,pv,SUM(pv) 
OVER
(
PARTITION BY cookieid 
ORDER BY createtime 
ROW BETWEEN 3 PRECEDING AND 1 FOLLOWING
) AS total_pv
FROM website_pv_info;

窗口排序函数 - ROW NUMBER

  • row_number:在每个分组中,为每行分配一个从1开始的唯一序列号,递增,不考虑数据的重复;
  • rank:在每个分组中,为每行分配一个从1开始的序列号,考虑数据的重复,挤占后续位置;
  • dense_rank:在每个分组中,为每行分配一个从1开始的序列号,考虑数据的重复,不挤占后续位置;
  • 适合Top N业务分析。
SELECT cookieid,createtime,pv,SUM(pv),RANK()
OVER
(
PARTITION BY cookieid 
ORDER BY createtime 
ROW BETWEEN 3 PRECEDING AND 1 FOLLOWING
) AS rank
FROM website_pv_info;

窗口排序函数 - NTILE

  • 将每个分组内的数据分为指定的若干个桶里(分为若干个部分),并且为每个桶分配一个桶编号。
  • 如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1.
  • NTILE可以取出指定的一部分数据。
SELECT cookieid,createtime,pv,NTILE(3)
OVER
(
PARTITION BY cookieid 
ORDER BY createtime 
) AS rank
FROM website_pv_info
ORDER BY cookieid,createtime;

窗口分析函数

  • LAG(col,n,DEFAULT):用于统计窗口内往上第n行值
    第一个参数为列名;第二个参数为往上第n行;第三个参数为默认值,即当往上第n行为NULL时,取默认值
  • LEAD(col,n,DEFAULT):用于统计窗口内往下第n行的值
    第一个参数为列名;第二个参数为往下第n行;第三个参数为默认值,即当往下第n行为NULL时,取默认值
  • FIRST_VALUE:取分组内排序后,截至至当行,第一个值
  • LAST_VALUE:取分组内排序后,截至至当行,最后一个值
  • 例:
SELECT cookieid,createtime,pv,LAG(createtime,1,'1970-01-01')
OVER
(
PARTITION BY cookieid 
ORDER BY createtime 
) AS last_time
FROM website_pv_info
ORDER BY cookieid,createtime;

相关文章:

Hive窗口函数语法规则、窗口聚合函数、窗口表达式、窗口排序函数 - ROW NUMBER 、口排序函数 - NTILE、窗口分析函数

Hive窗口函数 文章目录Hive窗口函数语法规则窗口聚合函数窗口表达式窗口排序函数 - ROW NUMBER窗口排序函数 - NTILE窗口分析函数窗口函数也叫开窗函数、OLAP函数其最大特点&#xff1a;输入值是从SELECT语句的结果集中的一行或多行的“窗口”中获取的。如果函数具有OVER子句&a…...

Go设计模式之函数选项模式

目录引入函数选项模式&#xff08;functional options pattern&#xff09;可选参数默认值接口类型版本引入 假设现在需要定义一个包含多个配置项的结构体&#xff0c;具体定义如下&#xff1a; // DoSomethingOption 定义配置项 type DoSomethingOption struct {// a 配置aa…...

ClickHouse 数据类型、函数大小写敏感性

这里写自定义目录标题SELECT *FROM system.data_type_families注意&#xff1a;case_insensitive0 表示大小写敏感。 ClickHouse 的 String 类型、Int 类型、Float 类型、Decimal类型等都是大小写敏感的&#xff08;case_sensitive0&#xff09;。关于ClickHouse大小写敏感&am…...

nodejs基于vue 网上商城购物系统

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2. 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行…...

掌握MySQL分库分表(一)数据库性能优化思路、分库分表优缺点

文章目录MySQL数据库性能优化思路【面试题】不分库分表软优化硬优化分库分表结论分库分表能解决的问题解决数据库本身瓶颈连接数解决系统本身IO、CPU瓶颈分库分表带来的问题问题⼀ 跨节点数据库Join关联查询问题二 分库操作带来的分布式事务问题问题三 执行的SQL排序、翻页、函…...

何为小亚细亚?

一、小亚细亚安纳托利亚&#xff08;Anatolia&#xff09;&#xff0c;又名小亚细亚或西亚美尼亚&#xff0c;是亚洲西南部的一个半岛&#xff0c;隶属于土耳其。安纳托利亚半岛&#xff0c;北临黑海&#xff0c;西临爱琴海&#xff0c;南濒地中海&#xff0c;东接亚美尼亚高原…...

【mircopython】ESP32配置与烧录版本

下载ESP32的Micropython固件 官方连接https://www.micropython.org/download/esp32/ 看了下描述&#xff0c;上面的是IDF4.x系列编译&#xff0c;下面是IDF3.x系列编译&#xff0c;我们默认选新的 下载安装CP2102驱动 CP210x USB to UART Bridge VCP Drivers - Silicon Labs…...

Yaml:通过extrac进行传参,关联---接口关联封装(基于一个独立YAML的文件)

一&#xff1a;在common包中&#xff0c;封装一个yaml_util的工具包 1. 将获取到的数据&#xff0c;写入到extrac.yaml文件中&#xff0c;通过data def write_extract_yaml(data): 2. 需要用到该参数时&#xff0c;读取extrac.yaml文件中&#xff0c;由于会有多个参数&#x…...

vue - vue中对Vant日历组件(calendar)的二次封装

vue中对vant日历选择器组件实现的的二次封装&#xff1b;主要实现功能如下: 主要功能&#xff1a; 日期区间选择&#xff08;基本&#xff09;&#xff1b;自定义选择器的底部按钮&#xff0c;添加清除时间操作&#xff08;slot插槽&#xff09;&#xff1b;指定默认选中的日期…...

详解C++的类型转换

文章目录前言一、C语言中的类型转换二、为什么C需要四种转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast四、RTTI总结前言 在C语言的类型转换有一个非常大的坑,有好多悄悄地转换,有时候把我们转换的就蒙了,因为C要兼容C语言,所以C就…...

NLP文本自动生成介绍及Char-RNN中文文本自动生成训练demo

前言 文本自动生成是自然语言处理领域的一个重要研究方向&#xff0c;实现文本自动生成也是人工智能走向成熟的一个重要标志。文本自动生成技术极具应用前景。 例如&#xff0c;文本自动生成技术可以应用于智能问答与对话、机器翻译等系统&#xff0c;实现更加智能和自然的人机…...

Teradata 离场,企业数据分析平台如何应对变革?

近日大数据分析和数仓软件巨头 Teradata&#xff08;TD&#xff09;宣布基于中国商业环境的评估&#xff0c;退出在中国的直接运营。TD 是全球最大的专注于大数据分析、数仓和整合营销管理解决方案的供应商之一&#xff0c;其早在 1997 年就进入中国&#xff0c;巅峰期占据半数…...

QWebEngineView-官翻

文章目录特性公共成员函数重实现公共成员函数公有槽函数信号静态公有成员函数保护成员函数重实现保护成员函数额外继承成员详细描述特性文档编制成员函数文档QWebEngineView::**QWebEngineView**([QWidget](../../W/QWidget.md) **parent* Q_NULLPTR)[virtual] QWebEngineView…...

网络安全高级攻击

对分类器的高层次攻击可以分为以下三种类型&#xff1a;对抗性输入&#xff1a;这是专门设计的输入&#xff0c;旨在确保被误分类&#xff0c;以躲避检测。对抗性输入包含专门用来躲避防病毒程序的恶意文档和试图逃避垃圾邮件过滤器的电子邮件。数据中毒攻击&#xff1a;这涉及…...

优思学院:六西格玛中的水平对比方法是什么?

水平对比&#xff0c;就是比较不同事物之间的差异。 这个概念在六西格玛管理中也很重要&#xff0c;也就是我们经常说的标杆管理&#xff0c;经常被用来寻找行业中最好的做法&#xff0c;以帮助组织改进自身的绩效。 在六西格玛管理中&#xff0c;水平对比有三种常见的应用方式…...

UVa 690 Pipeline Scheduling 流水线调度 二进制表示状态 DFS 剪枝

题目链接&#xff1a;Pipeline Scheduling 题目描述&#xff1a; 给定一张5n(1≤n≤20)5\times n(1\le n\le20)5n(1≤n≤20)的资源需求表&#xff0c;第iii行第jjj列的值为’X’表示进程在jjj时刻需要使用使用资源iii&#xff0c;如果为’.则表示不需要使用。你的任务是安排十个…...

【ArcGIS Pro二次开发】(6):工程(Project)的基本操作

在ArcGIS Pro中我们对工程的基本操作一般包括打开、新建、保存等。下面演示在二次开发中如何用代码进行以上操作。 新建一个项目&#xff0c;命名为【ProjectManager】&#xff0c;添加8个按钮&#xff0c;命名为【CreateEmptyProject、CreateProjectByDefault、OpenExProjest…...

Qt OpenGL(四十)——Qt OpenGL 核心模式-雷达扫描效果

提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(四十)——Qt OpenGL 核心模式-雷达扫描效果 一、场景 上一篇文章介绍了在雷达坐标系中绘制飞行的飞机,其实雷达坐标系应该还有一个效果,就是扫描的效…...

群智能优化算法求解标准测试函数F1~F23之种群动态分布图(视频)

群智能优化算法求解标准测试函数F1的种群动态分布图群智能优化算法求解标准测试函数F2的种群动态分布图群智能优化算法求解标准测试函数F3的种群动态分布图群智能优化算法求解标准测试函数F4的种群动态分布图群智能优化算法求解标准测试函数F5的种群动态分布图群智能优化算法求…...

vue-axios封装与使用

一、简介 Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 这是一个使用率很高的前端网络请求库&#xff0c;几乎所有的前端项目都会使用&#xff0c;本文主要介绍的是如何在vue项目中使用axios&#xff0c;并对其进行全面的封装。 注意&#x…...

在React 中安装和配置 shadcn/ui

1. 创建 React 项目 pnpm create vitelatest .选择模板&#xff1a;React TypeScript安装依赖&#xff1a;pnpm install2. 添加 Tailwind CSS pnpm add -D tailwindcss postcss autoprefixer修改 src/index.css 内容&#xff1a; import "tailwindcss";3. 配置 T…...

基于定制开发开源AI智能名片S2B2C商城小程序的首屏组件优化策略研究

摘要&#xff1a;在数字化转型背景下&#xff0c;用户对首屏交互效率的诉求日益提升。本文以"定制开发开源AI智能名片S2B2C商城小程序"为技术载体&#xff0c;结合用户行为数据与认知心理学原理&#xff0c;提出首屏组件动态布局模型。通过分析搜索栏、扫码入口、个人…...

软件功能测试报告都包含哪些内容?

软件功能测试报告是软件开发生命周期中的重要文档&#xff0c;主要涵盖以下关键内容&#xff1a;    1.测试概况&#xff1a;概述测试目标、范围和方法&#xff0c;确保读者对测试背景有清晰了解。 2.测试环境&#xff1a;详细描述测试所用的硬件、软件环境&#xff0c;确保…...

SOC-ESP32S3部分:36-适配自己的板卡

飞书文档https://x509p6c8to.feishu.cn/wiki/RP4UwPrsKi4xuQkKLAAcKxD3n1b 如果你自己画了PCB板&#xff0c;需要把自己绘制的板卡配置小智AI工程&#xff0c;可以参考此文档。 下载源码 克隆或下载源码到本地&#xff0c;这里以1.5.5为例&#xff0c;大家可以自行修改其它版…...

深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析

一、工业场景&#xff1a;非线性缺陷检测与预测 1. ‌半导体晶圆缺陷检测‌ ‌问题‌&#xff1a;微米级划痕、颗粒污染等缺陷形态复杂&#xff0c;与正常纹理呈非线性关系。‌解决方案‌&#xff1a; ‌输入张量‌&#xff1a;高分辨率晶圆图像 → 三维张量 (Batch, Height,…...

第七十三篇 从电影院售票到停车场计数:生活场景解析Java原子类精髓

目录 一、原子类基础&#xff1a;电影院售票系统1.1 传统售票的并发问题1.2 原子类解决方案 二、原子类家族&#xff1a;超市收银系统2.1 基础类型原子类2.2 数组类型原子类 三、CAS机制深度解析&#xff1a;停车场管理系统3.1 CAS工作原理3.2 车位计数器实现 四、高性能实践&a…...

web3-基于贝尔曼福特算法(Bellman-Ford )与 SMT 的 Web3 DeFi 套利策略研究

web3-基于贝尔曼福特算法&#xff08;Bellman-Ford &#xff09;与 SMT 的 Web3 DeFi 套利策略研究 如何找到Defi中的交易机会 把defi看做是一个完全开放的金融产品图表&#xff0c;可以看到所有的一切东西&#xff1b;我们要沿着这些金融图表找到一些最优的路径&#xff0c;就…...

IDEA集成JRebel插件,实现实时热部署

系列文章目录 文章目录 系列文章目录一、JRebel是什么&#xff1f;1.1、对比传统开发流程1.2、JRebel特性以及优势 二、IDEA集成JRebel三、IDEA以JRebel运行报错处理四、IDEA以JRebel运行演示实时热部署 一、JRebel是什么&#xff1f; JRebel 是一款针对 Java 开发的热部署工具…...

dvwa5——File Upload

LOW 在dvwa里建一个testd2.php文件&#xff0c;写入一句话木马&#xff0c;密码password antsword连接 直接上传testd2.php文件&#xff0c;上传成功 MEDIUM 查看源码&#xff0c;发现这一关只能提交jpg和png格式的文件 把testd2.php的后缀改成jpg&#xff0c;上传时用bp抓包…...

Apache POI操作Excel详解

Maven依赖 <!-- 核心库&#xff08;支持.xls&#xff09; --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId> </dependency><!-- 支持.xlsx格式 --> <dependency><groupId>org.a…...