高频面试八股文用法篇(一) hive窗口函数

news2024/11/25 16:57:41

目录

什么是窗口函数

窗口函数与其他函数区别

over()函数

窗口函数类型

窗口函数举例


什么是窗口函数

窗口函数是一种SQL函数,非常适合于数据分析,因此也叫做OLAP函数。

最大特点是:输入值是从SELECT语句的结果集中的一行或多行的“窗口”中获取的。

窗口函数简单的说就是在执行聚合函数的时候指定一个操作窗口,这个窗口由over来进行控制

窗口函数与其他函数区别

如果函数具有OVER子句,则它是窗口函数。

如果它缺少OVER子句,则它是一个普通的聚合函数

通过GROUP BY子句组合的常规聚合会隐藏正在聚合的各个行,最终输出一行,窗口函数聚合后还可以访问当中的各个行,并且可以将这些行中的某些属性添加到结果集中。

 例子:

 

参考

hive窗口函数(开窗函数)_hive 窗口函数_万里长江横渡的博客-CSDN博客 

over()函数

over():指定分析函数工作的数据窗口大小,这个大小可能会随着行的变化而变化。

其基本语法如下:<分析函数> over ( partition by <用于分组的列名> order by <用于排序的列名> desc/asc rows between 开始行 and 结束行 )
例子:

select 
    user_id,
    user_type,
    sales,
    count(user_id) over(partition by user_type order by sales desc 
          rows between unbounded preceding and current row) as cnt
from order_detail

over()里面一共有3部分组成:分区、排序、指定窗口范围,注意这三部分可以组合使用,也可以不使用。

  1. partition by col:按照字段col分组,在组内进行分析。
  2. order by col:分组后在组内按照字段col进行排序。
  3. rows/range:窗口子句,在分析时进一步分组。
  • rows: 是物理窗口,即根据order by子句排序后,取的前m行及后n行的数据计算
  • range: 是逻辑窗口,是指定当前行对应值的范围取值,取大于等于当前行的值-m的行,以及小于等于当前行的值+n的行进行计算

窗口范围取值可选项
1)范围取值

【a:rows+参数来控制范围】

默认值(不写):这个其实是最常用的,下面会进行不同情况下默认值总结

preceding:往前;

following: 往后

current row:当前行

unbounded :起点(一般结合preceding,following使用)

unbounded preceding: 表示该窗口最前面的行(起点)

unbounded following:该窗口最后面的行(终点)
例子:

rows between unbounded preceding and current row  --(表示从窗口起点到当前行)
rows between unbounded preceding and unbounded following--(表示从窗口起点到终点)
rows between 2 preceding and 1 following     --(表示往前2行到往后1行)
rows between 2 preceding and 1 current row   --(表示往前两行到当前行)
rows between current row and unbounded following   --(表示当前行到终点)

窗口函数类型

常用窗口可划分为如下几类:聚合函数(max、min、sum、avg、count)、跨行取值函数()、排名函数

例子: 三个排序函数区别(每种用户类型销量排名)

select 
    user_id,
    user_type,
    sales,
    row_number()  over(partition by user_type order by sales) as rn,
    dense_rank()  over(partition by user_type order by sales) as rd,
    rank()        over(partition by user_type order by sales) as rr
from order_detail 

返回排序序号
ROW_NUMBER() : 一列连续的序号,如1,2,3,4,5
RANK():对于数值相同的这一项会标记为相同的序号,而下一个序号跳过。比如{4,5,6}变成了{4,4,6}.
DENSE_RANK():对于数值相同的这一项,也会标记为相同的序号,但下一个序号并不会跳过。比如{4,5,6}变成了{4,4,5}.

 例子:Hive中使用over()实现累积求和

sum(需要求和的列) over(partition by 分组列 )
sum(需要求和的列) over(partition by 分组列 order by 排序列 asc/desc)

sum(需要求和的列) over(partition by 分组列 order by 排序列 range between … and …)

select*,sum(cnt) over(partition by name order by month) as total_cnt
from default.salerinfo       

例子:

> --默认为从起点到当前行
 > sum(t.gold_medal) over (order by t.gold_medal) as sum2,
 > --从起点到当前行,同sum2。
 > sum(t.gold_medal) over (order by t.gold_medal rows between unbounded preceding and current row) as sum3,
> --当前行+往前1行
 > sum(t.gold_medal) over (order by t.gold_medal rows between 1 preceding and current row) as sum4,
 > --当前行+往前1行+往后2行
 > sum(t.gold_medal) over (order by t.gold_medal rows between 1 preceding and 2 following) as sum5,

窗口函数举例

lead (col,n,def) :返回窗口内col列往下第n行的值。col为列名,n为往下第n行(省略则默认为1),def为默认值。 说明:与lag的取值方向相反。

lag (col,n,def):返回窗口内col列往上第n行的值。col为列名,n为往上第n行(省略则默认为1),def为默认值。 说明:与lead的取值方向相反。

分别包括:

lag和lead(不支持自定义窗口):

lag(): 按照 所在行的偏移量 取 前面的第几行

lead(): 按照 所在行的偏移量 取 后面的第几行

first_value和last_value(支持自定义窗口):

first_value():当前窗口内所有行数据中的最小值
last_value(): 当前窗口内所有行数据中的最大值
⚠️要注意,lag和lead不能使用自定义窗口,因为已经规定好了具体某一行与当前行作为一个窗口,不能再定义是负无穷到正无穷这样自定义的规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vivo互联网视频播放体验优化的探索与实践

随着vivo互联网在视频业务领域的不断扩展&#xff0c;在多样化的业务场景下&#xff0c;如何提升每个用户的视频播放体验&#xff0c;保障最优的播放流畅度和清晰度&#xff0c;vivo互联网技术团队做了很多尝试与突破。LiveVideoStackCon 2022北京站邀请vivo互联网研发经理王道…

CSDN 富文本编辑器的优化建议(1)

CSDN 富文本编辑器的优化建议&#xff08;1&#xff09; &#x1f4da; 写在前面&#xff1a;大家好~ 我是柠檬叶子C&#xff0c;今天是我在 C 站 1000 天创作纪念日&#xff01;在这些日子里&#xff0c;我累计发布了 230 篇博客&#xff0c;这些博客无一例外都是用 C 站的 &q…

深眸科技创新视觉应用,AI+机器视觉为智能制造升级提供新视野

随着智能制造的进程不断加快&#xff0c;各大工业领域正在积极进行数字化转型&#xff0c;加速从制造到“智”造的转变。在全球制造业转型升级的浪潮下&#xff0c;从机器互联互通到人机协作再到无人工厂&#xff0c;机器视觉技术起到了重要作用。机器视觉用机器代替人眼&#…

easyui列表数据核对检查数据展示

1.easyui窗口内放置table列表 <div id"window_Id" class"easyui-window" title"异常参数列表展示" style"width:602px;height:493px;"data-options"closed:true,maximizable:false,resizable:true,minimizable:false,shadow:…

031:Mapbox GL实现地图导航功能,可选择起始点、路线、通行方式

第031个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中实现地图导航功能,可选择起始点、路线、通行方式。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共71行)安装插件相关API参考:专栏目标示例效果…

《Java并发编程实战》课程笔记(七)

Java 线程 Java 线程的生命周期 通用的线程生命周期 通用的线程生命周期基本上可以用下图这个“五态模型”来描述。这五态分别是&#xff1a;初始状态、可运行状态、运行状态、休眠状态和终止状态。 Java 中线程的生命周期 Java 语言中线程共有六种状态&#xff0c;分别是…

Pytorch入门(三)深度学习模型的训练的基本步骤

文章目录 一、修改现有的网络模型二、模型的保存三、模型的加载四、模型的评估五、训练模型的完整套路六、使用GPU加速模型的训练七、模型训练完整的验证套路 一、修改现有的网络模型 import torchvision from torch import nn # pretrained 为True时会自动下载模型所对应的权…

ES6-ES13学习笔记(4.0)

includes函数 判断字符串是否存在指定字符 <!--* Author: RealRoad1083425287qq.com* Date: 2023-06-01 08:40:33* LastEditors: Mei* LastEditTime: 2023-06-01 08:58:54* FilePath: \vscode\ECMA\05\01.html* Description: * * Copyright (c) 2023 by ${git_name_ema…

Docker+Jenkins+Gitee自动化部署maven项目

1.简介 各位看官老爷&#xff0c;本文为Jenkins实战&#xff0c;注重实际过程&#xff0c;阅读完会有以下收获&#xff1a; 了解如何使用Docker安装Jenkins了解如何使用Jenkins部署maven项目了解如何使用JenkinsGitee实现自动化部署 2.Jenkins介绍 相信&#xff0c;正在读这…

美国频频对中国芯片出手,却没想到最先倒下的是美芯巨头

据报道指出全球知名的硬盘厂商西部数据已基本敲定与日本存储芯片巨头铠侠的合并计划&#xff0c;不过让人意外的是最终主导者将是铠侠而不是西部数据&#xff0c;这意味着西部数据将从此消失于历史之中。 西部数据是全球最大的硬盘厂商&#xff0c;它先后收购了知名硬盘厂商希捷…

【实用篇】Docker

文章目录 Docker实用篇1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.安装Docker1.…

springboot+vue高校班级管理系统 java 同学录校友录网站

本海滨学院班级回忆录管理员功能有个人中心&#xff0c;用户信息管理&#xff0c;班委信息管理&#xff0c;班级信息管理&#xff0c;加入班级管理&#xff0c;新闻信息管理&#xff0c;班级相册管理&#xff0c;活动信息管理&#xff0c;捐赠信息管理&#xff0c;论坛信息管理…

界面控件DevExpress ASP.NET新主题——Office 365暗黑主题的应用

DevExpress ASP.NET Web Forms Controls拥有针对Web表单&#xff08;包括报表&#xff09;的110种UI控件&#xff0c;DevExpress ASP.NET MVC Extensions是服务器端MVC扩展或客户端控件&#xff0c;由轻量级JavaScript小部件提供支持的70个高性能DevExpress ASP.NET Core Contr…

2023年6月跟教授学DAMA-CDGA/CDGP数据治理认证到这里

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

什么?要求设计一个循环队列?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:讲解用c…

PortSwigger 基于不安全的反序列化漏洞

一、反序列化漏洞简单介绍 反序列化漏洞是指攻击者通过在应用程序中注入恶意的序列化对象来利用应用程序的反序列化功能&#xff0c;从而导致应用程序受到攻击的漏洞。 在一些编程语言和应用程序中&#xff0c;对象可以被序列化为一些字节流或字符串&#xff0c;然后在不同的应…

基于Java+SpringBoot+Vue前后端分离网课在线学习观看系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

C#正则表达式的使用

C#正则表达式 System.Text.RegularExpressions.Regex 使用时需要引入命名空间 using System.Text.RegularExpressions; 如果不引用则写成 System.Text.RegularExpressions.Regex 使用方法如下&#xff1a; string str"测试123456"; string result""; re…

chatgpt赋能python:Python代码中的符号

Python代码中的符号 Python是一种简单易学的编程语言&#xff0c;拥有着广泛的应用领域&#xff0c;比如数据分析、人工智能、Web开发等等。在Python的编程过程中&#xff0c;符号是我们必须要熟悉的一部分。在本文中&#xff0c;我们将介绍Python代码中常见的符号&#xff0c…

华为OD机试真题B卷 Java 实现【人民币转换】,附详细解题思路

一、题目描述 考试题目和要点&#xff1a; 中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。中文大写金额数字到“元”为止的&#xff0c;在“元”之后&#xff0c;应…