当前位置: 首页 > 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…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...