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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7天前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
1月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
1月前
|
SQL 消息中间件 分布式计算
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
71 0
|
1月前
|
SQL 大数据
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
57 0
|
1月前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
45 0
|
1月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
42 0
|
1月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
78 0
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0
|
1月前
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
50 0
|
1月前
|
SQL 存储 分布式计算
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
37 0