Hive学习(13)lag和lead函数取偏移量

hive里面lag函数

在数据处理和分析中,窗口函数是一种重要的技术,用于在数据集中执行聚合和分析操作。Hive作为一种大数据处理框架,也提供了窗口函数的支持。在Hive中,Lag函数是一种常用的窗口函数,可以用于计算前一行或前N行的值。

窗口函数简介

窗口函数是一种用于根据特定条件对数据进行分组和排序的函数,它可以在查询中使用。窗口函数配合分析函数一起使用,能够对数据进行更加灵活和高效的处理。

Hive中的窗口函数可以用于以下几种情况:

  1. 计算移动平均值或累积总和
  2. 计算每一行与前一行的差值
  3. 获取某一行相对于整个数据集的排序位置
  4. 对数据进行分组后,获取每个分组的排名

语法:

LAG(input[, offset[, default]]) OVER([PARTITION BY partition_expression, ...] ORDER BY sort_expression [, ...])

参数说明:

input:要获取的值所在的列或者表达式
offset:要获取的行之前的偏移量,默认为1
default:当没有前一行时,返回的默认值

场景1:
原数据如下,目标是客户取上次购买时间

cust_nopurc_date
3000312022-01-01
3000312022-01-02
3000312022-01-03
3000312022-01-04
3000312022-01-05
3000312022-01-06

代码如下:
lag(字段,向上取几行,取不到给默认值),lag函数是可以直接取指定行数,取不到默认为null;
可设置默认值,语法中【default】位置赋值默认值;
lead 同理,向下取行;
(lag设置默认值 ‘1970-01-01’ ,lead未设置;看下效果)

select cust_no,purc_date,lag(purc_date,1,'1970-01-01') over (partition by cust_no order by purc_date) as time1,-- 上次购买时间(设置默认值)lead(purc_date,1) over (partition by cust_no order by purc_date) as time2 -- 下次购买时间
from table_name a;

结果:
lag结果的首条记录的上次购买时间(已经是首条记录故没有上次购买时间),返回设置的默认值 ‘1970-01-01’;
lead结果的末条购买时间的下次购买时间为null

客户编号购买时间上次购买时间下次购买时间
3000312022-01-011970-01-012022-01-02
3000312022-01-022022-01-012022-01-03
3000312022-01-032022-01-022022-01-04
3000312022-01-042022-01-032022-01-05
3000312022-01-052022-01-042022-01-06
3000312022-01-062022-01-05NULL

补充:

--如有此业务场景,可计算本次距离上次间隔天数
datediff(purc_date,lag(purc_date,1,'1970-01-01') over (partition by cust_no order by purc_date))

场景2
简单看一下场景2,有问题可评论或私信讨论。
现在,我们希望计算每个产品的月度增长率,即当前月份的销售额与前一个月份的销售额之比。可以使用Lag函数来实现这个目标:

select mth			--月份,product	--产品代码,revenue	--收入金额,(revenue / lag(revenue) over(partition by product order by mth)) as growth_rate	--月度增长率
fromtable_name
order by product,mth

结果:
产品A因未设置默认值,所以返回NULL;产品B同理
在这里插入图片描述

参考:
https://blog.csdn.net/szdxltt/article/details/128615440
https://blog.51cto.com/u_16213418/7061149

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决grafana模板分区展示数值和使用率不准的问题

我们看监控数据无非就是要准确,但grafana的模板上有时候会遇到数值计算不够准、显示位数不够全的问题,经过自己摸索与实践已经达到了目的,收录到此文分享。 下文分两个方面,我们来看看怎样解决. 目录 1,小数位数修改 …

Rockchip平台Android应用预安装功能(基于Android13)

Rockchip平台Android应用预安装功能(基于Android13) 1. 预安装应用类型 Android上的应用预安装功能,主要是指配置产品时,根据厂商要求,将事先准备好的第三方应用预置进Android系统。预安装分为以下几种类型: 安装不可卸载应用安…

《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比

前言 2024 年 啦!Vue2 也于 2023.12.31 寿终正寝 ! 然而我的 Vue3 升级一再拖延(惭愧不已)~ 赶起来吧~ 今天用 vue-cli 和 vite 分别创建了 Vue3 项目,具体实现步骤见如下两篇。 《基于 Vue Cli4.x Vue3 TS styl…

人工智能_机器学习087_DBSCAN聚类案例_聚类数据创建---人工智能工作笔记0127

之前我们把DBSCAN的原理以及参数都理解了,现在我们看如何使用 首先我们导包 import numpy as np 导入数学计算包 import matplotlib.pyplot as plt 导入画图包 from sklearn.cluster import KMeans,DBSCAN 导入算法 from sklearn import datasets 导入数据集包 X,y = data…

【IDEA——连接MySQL数据库,创建库和表】

IDEA——连接MySQL数据库,创建库和表 1、打开idea数据库操作页面(两种打开方法都可以) 2、点击加号,选择Driver,方便导入连接数据库的驱动jar包 然后选择MySQL进行添加驱动 3、点击上一步页面的左上方的Data Sources连接本地数据…

初始py和py开发工具

前言:上一章节给友友们讲解了如何安装py环境,这一章节就来练习一下如何写py的程序以及注意事项。 目录 一.你好世界 1.因为主播liunx用习惯的缘故所以所有的操作都在liunx上面执行,下面我们来看怎么写py的程序, 1.1首先打开liu…

【QT搭建】搭建可以生成手机APP的环境

一.问题分析 1.在原来的QT版本上安装Android(不推荐) 此方法暂时未实践成功,记录调试过程,可跳过 如果原来安装过QT桌面级PC软件的,可能没有配置JDK和SDK就会在QT选项的设备栏目种看到报错的提示。 并且Kits的选项里面没有Android,所以解决的问题是,缺少Kit套件Andro…

Qt(三):udp组播的发送与接收

1. 创建UDP套接字 使用QUdpSocket类创建一个UDP套接字。 udpSendnew QUdpSocket(this);udpRecenew QUdpSocket(this); 2. 绑定套接字 绑定套接字到一个本地地址和端口。可以使用bind()函数来完成。 如果要在组播中发送数据,可以将套接字绑定到一个通配符地址&#…

[GKCTF 2020]ez三剑客-eztypecho

[GKCTF 2020]ez三剑客-eztypecho 考点:Typecho反序列化漏洞 打开题目,发现是typecho的CMS 尝试跟着创建数据库发现不行,那么就搜搜此版本的相关信息发现存在反序列化漏洞 参考文章 跟着该文章分析来,首先找到install.php&#xf…

NSSCTF 1zjs

开启环境: 搞就完事了,别玩魔法! 源码打开 点击访问:./dist/index.umd.js" 搜索php,找到23条相关的,注意到有一个特别的信息: PERFORMANCE OF THIS SOFTWARE.Your gift just take it : /fk3f1ag.php 访问: node4.anna.nssctf.cn:28325/fk3f1ag.php 得到这样: ([![]…

JS中indexOf()方法的使用

在工作中 , indexOf() 方法使用频率还是非常高的,对于这个知识点,我们来做个简单的总结 基本定义:indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果没有找到返回-1 - indexOf() 只返回字符串在规定的查找顺…

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析

内容来源于:易道云信息技术研究院VIP课 之前的内容:接管游戏的自动药水设定功能-CSDN博客 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:34b9c1d43b512d0b4a3c395b…