MaxCompute 使用SQL进行连续区间问题分析

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 使用内置函数分析连续区间问题

连续区间问题在业务分析中也很常见:连续N天登陆、车辆持续运行时长、系统状态报告连续日期等等等,接下来以真实需求的简化版进行分析

案例:某线上作业每天都会运行一次,且独立于其他的任务,运行结果会保留到一张表中run_status_result_1d;运行状态只有两个值:failed/succeeded,数据如下:

run_date

status

...

...

2021-08-01

succeeded

2021-08-02

succeeded

2021-08-03

succeeded

2021-08-04

succeeded

2021-08-05

succeeded

2021-08-06

failed

2021-08-07

failed

2021-08-08

failed

2021-08-09

succeeded

2021-08-10

succeeded

2021-08-11

succeeded

...

...

需求:作业运行状态的连续日期 结果数据展示如下:

status

start_date

end_date

succeeded

2021-08-01

2021-08-05

failed

2021-08-06

2021-08-07

...

...

...

分析:利用sum(if)组合进行分析

  1. 生成一些数据
with tb1 as(select        run_date,        status
fromvalues('2021-08-01','succeeded'),('2021-08-02','succeeded'),('2021-08-03','succeeded'),('2021-08-04','succeeded'),('2021-08-05','succeeded'),('2021-08-06','failed'),('2021-08-07','failed'),('2021-08-08','failed'),('2021-08-09','succeeded'),('2021-08-10','succeeded'),('2021-08-11','succeeded'),('2021-08-12','succeeded')               t(run_date,status))
  1. 利用lag函数拿到上一条运行状态
tb2 as(select        run_date,        status,        lag(status,1,status) over(orderby run_date) lag_status
from tb1
)
  1. 利用当前数据状态与上一条状态的异同进行分分组
tb3 as(select        run_date,        status,        lag_status,        sum(if(status!=lag_status,1,0)) over(orderby run_date) flag
from tb2
)--数据分组效果如下:run_date    status    lag_status  flag
2021-08-01  succeeded succeeded   02021-08-02  succeeded succeeded   02021-08-03  succeeded succeeded   02021-08-04  succeeded succeeded   02021-08-05  succeeded succeeded   02021-08-06  failed    succeeded   12021-08-07  failed    failed      12021-08-08  failed    failed      12021-08-09  succeeded failed      22021-08-10  succeeded succeeded   22021-08-11  succeeded succeeded   22021-08-12  succeeded succeeded   2
  1. 对上述数据按flag求最大时间和最小时间即为结果
select    min(status)as status,    min(run_date)as start_date,    max(run_date)as end_date
from tb3
groupby flag;--结果如下:status    start_date  end_date
succeeded 2021-08-012021-08-05failed    2021-08-062021-08-08succeeded 2021-08-092021-08-12

对于案例中使用sum(if)组合,在业务需求分析中经常使用,也可以简化很多代码,还未使用的小伙伴,可以尝试使用下

拜了个拜

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
3月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
268 3
|
3月前
|
SQL 存储 分布式计算
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
本文旨在帮助非专业数据研发但是有高频ODPS使用需求的同学们(如数分、算法、产品等)能够快速上手ODPS查询优化,实现高性能查数看数,避免日常工作中因SQL任务卡壳、失败等情况造成的工作产出delay甚至集群资源稳定性问题。
1045 36
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
|
4月前
|
SQL 分布式计算 大数据
SparkSQL 入门指南:小白也能懂的大数据 SQL 处理神器
在大数据处理的领域,SparkSQL 是一种非常强大的工具,它可以让开发人员以 SQL 的方式处理和查询大规模数据集。SparkSQL 集成了 SQL 查询引擎和 Spark 的分布式计算引擎,使得我们可以在分布式环境下执行 SQL 查询,并能利用 Spark 的强大计算能力进行数据分析。
|
7月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
7月前
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
212 15
|
6月前
|
SQL 人工智能 分布式计算
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
113 0
|
8月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
274 12
|
8月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
9月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
353 35