hsql统计两天数据差异的算法及lag()/led()分析函数的使用

简介: hsql统计两天数据差异的算法及lag()/led()分析函数的使用

   最近在工作中,业务方提出了一个对数据监控预警的需求。即统计每日的数据量差异,如果此差异超过某个设定的阈值,将会自动邮件给相关的数据维护人员,查找出造成数据量波动较大的原因,及时做出相应调整,防止数据缺失的风险。


            在实际的业务需求中,常常会让你统计当天与前一天数据差异的指标。


            假设表t_tier的结构及存储数据如下:

image.png

  uid的tier每天都会变化(比如:6月24属于A,6月25属于B),故将该表放在在调度系统中每日跑数,就会造成类别A、B、C每日的数据量不同

             现要统计每个类别当天与前一天数据的差异指标,表结构如下,t_differ

1ecd1b2606ed46e9956a89f231c9802c.png

  思路:

            1、首先,创建一个分区表t_total,统计出每日每个类别的总量,存入当日分区;


            2、接着,选出t_total表中日期最大的条目再与t_total自连接,过滤出当日与前日的数据,然后计算相应指标。      

   代码实现:

--创建存储每日各版本标签总量的表
create table t_total (                      
      data_date string comment'日期',
      tier string comment'标签',
      today_total string comment '今日标签总数'
) partitioned by (dt string comment '分区字段,值同data_date')
set hive.exec.dynamic.partition.mode=nonstrict; --设置自动分区
insert overwrite table t_total partition(dt)
select
t.data_date
,t.tier
,t.today_total
,t.data_date as dt
from (
select 
'$now.date' as data_date --'$now.date',python脚本中的写法
,tier
,count(*) as today_total
from t_tier 
group by tier) t 
--创建数据差异表(可分区,可不分区)
create table t_tier_total_monitor (                      
      data_date string comment'日期',
      tier string comment'标签',
      yesterday_total string comment '昨日标签总数',
      today_total string comment '今日标签总数',
      diff_rate string comment '昨日和今日差异'
) partitioned by (dt string comment '分区字段,值同data_date')
-------------------------------------------------------------------------------------
--统计两天数据差异的方法一:
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table t_tier_total_monitor partition(dt)
select 
 b.today as data_date
,b.tier
,(case when a.today_total is not null and a.today_total<>'0' then a.today_total else 'NaN' end) as yesterday_total
,b.today_total as today_total
,(case when b.today_total is not null and b.today_total<>'0' then round((cast(((b.today_total-a.today_total)/b.today_total*100) as double)),2) else 'NaN' end)as diff_rate
,b.today as dt
from t_total a 
left join
(select tier
,today_total
,data_date as today
,row_number() over(partition by tier order by data_date desc) as rn
from t_total) b  --从t_total表中筛出最近一天的数据(当天数据)
on a.tier=b.tier
where date_sub(b.today,1)=a.data_date and b.rn=1 --筛选出最近一天减1天等于前一天的数据

   使用lag()函数

--统计两天数据差异方法二:
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table t_tier_total_monitor(dt)
select  
data_date 
,tier 
,lag(today_total,1,'NaN') over(partition by tier order by data_date) yesterday_total 
,today_total as today_total 
,round((cast((((today_total-lag(today_total,1,'NaN') over(partition by tier order by data_date))/lag(today_total,1,'NaN') over(partition by tier order by data_date))*100) as double)),2) diff_rate 
,dt 
from t_total

lag()/led()分析函数

lag与lead函数是跟偏移量相关的两个分析函数


      通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤,该操作可代替表的自联接,且效率更高


lag()/lead()

 lead(field, num, defaultvalue)

   field: 需要查找的字段

   num: 往后查找的num行的数据

   defaultvalue: 没有符合条件的默认值

over()

 表示lag()与lead()操作的数据都在over()的范围内,里面可以使用以下子句

   partition by 语句(用于分组)

   order by 语句()用于排序)

 如:over(partition by a order by b) 表示以a字段进行分组,再以b字段进行排序,对数据进行查询。


参考:https://www.cnblogs.com/shiliye/p/12361624.html


目录
打赏
0
0
0
0
1
分享
相关文章
从公布的前十一批其他算法备案通过名单分析
2025年3月12日,国家网信办发布算法备案信息,深度合成算法通过395款,其他算法45款。前10次备案中,深度合成算法累计3234款,其他类别647款。个性化推送类占比49%,涵盖电商、资讯、视频推荐;检索过滤类占31.53%,用于搜索优化和内容安全;调度决策类占9.12%,集中在物流配送等;排序精选类占8.81%,生成合成类占1.55%。应用领域包括电商、社交媒体、物流、金融、医疗等,互联网科技企业主导,技术向垂直行业渗透,内容安全和多模态技术成新增长点。未来大模型检索和多模态生成或成重点。
从公布的前十一批其他算法备案通过名单分析
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
境内深度合成服务算法备案通过名单分析报告
本报告基于《境内深度合成服务算法备案通过名单》,分析了2023年6月至2025年3月公布的10批备案数据,涵盖属地分布、行业应用及产品形式等多个维度。报告显示,深度合成算法主要集中于经济发达地区,如北京、广东、上海等地,涉及教育、医疗、金融、娱乐等多行业。未来趋势显示技术将向多模态融合、行业定制化和安全合规方向发展。建议企业加强技术研发、拓展应用场景、关注政策动态,以在深度合成领域抢占先机。此分析旨在为企业提供参考,助力把握技术发展机遇。
境内深度合成服务算法备案通过名单分析报告
如何在Python下实现摄像头|屏幕|AI视觉算法数据的RTMP直播推送
本文详细讲解了在Python环境下使用大牛直播SDK实现RTMP推流的过程。从技术背景到代码实现,涵盖Python生态优势、AI视觉算法应用、RTMP稳定性及跨平台支持等内容。通过丰富功能如音频编码、视频编码、实时预览等,结合实际代码示例,为开发者提供完整指南。同时探讨C接口转换Python时的注意事项,包括数据类型映射、内存管理、回调函数等关键点。最终总结Python在RTMP推流与AI视觉算法结合中的重要性与前景,为行业应用带来便利与革新。
|
26天前
|
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
34 3
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等