MaxCompute 使用SQL进行分区间段统计分析

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

业务分析中经常会碰到'每隔N时间交易额、平均速度、波峰..'等等问题,这类问题在实时中很好写,利用flinkSQL滚动窗口聚合即可;离线数据使用sql如何分析呢,接下来以真实需求的简化版进行分析

案例:某电商平台的某张表中存在该平台的交易数据量,示例数据如下:

order_id

order_date

order_count

201

2021-08-12 18:21:08

25

202

2021-08-12 18:21:09

44

203

2021-08-12 18:21:10

23

204

2021-08-12 18:21:11

54

205

2021-08-12 18:21:12

56

206

2021-08-12 18:21:13

23

207

2021-08-12 18:21:14

14

208

2021-08-12 18:21:15

27

209

2021-08-12 18:21:16

48

210

2021-08-12 18:21:17

32

211

2021-08-12 18:21:18

65

212

2021-08-12 18:21:19

88

213

2021-08-12 18:21:20

102

214

2021-08-12 18:21:21

104

215

2021-08-12 18:21:22

120

216

2021-08-12 18:21:23

111

217

2021-08-12 18:21:24

98

218

2021-08-12 18:21:25

92

219

2021-08-12 18:21:26

90

220

2021-08-12 18:21:27

85

...

...

...

需求5秒汇总一下结果,展示结果如下:

id

start_date

end_date

amount

1

2021-08-12 18:21:08 2021-08-12 18:21:12

202

2

2021-08-12 18:21:13

2021-08-12 18:21:17

144

3

2021-08-12 18:21:18

2021-08-12 18:21:22

479

...

...

...

...

分析:关键问题在于这个5秒如何划分出来?我们知道一个数除以5得到的值,在没到5的倍数时值的整数部分都是一样的(如下)

select20/5;--4.0select21/5;--4.2select22/5;--4.4select23/5;--4.6select24/5;--4.8

可以利用时间戳/5得到值进行取整,这样可以得到2021-08-12 18:21:08~2021-08-12 18:21:10、2021-08-12 18:21:11~2021-08-12 18:21:15这样分组的数据;但是这样的分组是不符合要求的,需求是从首条时间戳+5s进行统计,即2021-08-12 18:21:08~2021-08-12 18:21:12、2021-08-12 18:21:13~2021-08-12 18:21:17。

这个需求可以利用取余进行处理,任何数除以5得到的余数都在[0,4]之间(如下)

select20%5;--0select21%5;--1select22%5;--2select23%5;--3select24%5;--4
  1. 生成示例数据,并对时间进行标记
with tb1 as(select        order_id,        order_date,        unix_timestamp(to_date(order_date,'yyyy-mm-dd hh:mi:ss'))%5as flag,--取值:0 1 2 3 4        order_count
fromvalues(201,'2021-08-12 18:21:08',25),(202,'2021-08-12 18:21:09',44),(203,'2021-08-12 18:21:10',23),(204,'2021-08-12 18:21:11',54),(205,'2021-08-12 18:21:12',56),(206,'2021-08-12 18:21:13',23),(207,'2021-08-12 18:21:14',14),(208,'2021-08-12 18:21:15',27),(209,'2021-08-12 18:21:16',48),(210,'2021-08-12 18:21:17',32),(211,'2021-08-12 18:21:18',65),(212,'2021-08-12 18:21:19',88),(213,'2021-08-12 18:21:20',102),(214,'2021-08-12 18:21:21',104),(215,'2021-08-12 18:21:22',120),(216,'2021-08-12 18:21:23',111),(217,'2021-08-12 18:21:24',98),(218,'2021-08-12 18:21:25',92),(219,'2021-08-12 18:21:26',90),(220,'2021-08-12 18:21:27',85)               t(order_id,order_date,order_count))
  1. 找出余数[0,4]循环的第一个数
tb2 as(select        order_id,        order_date,        order_count,        flag,        first_value(flag) over(orderby order_id) first_flag
from tb1
)
  1. 使用sum(if)进行分组(该使用方法在系列文章上一篇已经概述)
tb3 as(select        order_id,        order_date,        order_count,        flag,        first_flag,        sum(if(flag=first_flag,1,0)) over(orderby order_id) group_flag
from tb2
)
  1. 对分组之后的数据进行统计
select    group_flag as id,    min(order_date)as start_time,    max(order_date)as end_time,    sum(order_count)as amount
from tb3
groupby group_flag;--运行结果如下:id  start_time            end_time              amount
12021-08-1218:21:082021-08-1218:21:1220222021-08-1218:21:132021-08-1218:21:1714432021-08-1218:21:182021-08-1218:21:2247942021-08-1218:21:232021-08-1218:21:27476

该案例主要分析了分区间段求解的思路,按照该思路结合具体业务需求可实现动态分区间。

今日分享到此结束,拜了个拜

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1天前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之未保存的ODPS SQL语句该如何找回
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
26天前
|
SQL 分布式计算 MaxCompute
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
|
1天前
|
SQL 分布式计算 运维
DataWorks产品使用合集之如何恢复odps误删的分区
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
26天前
|
分布式计算 MaxCompute 计算机视觉
ODPS问题之odps.sql.mapper.split.size属性有什么作用,以及如何根据场景调整它
ODPS问题之odps.sql.mapper.split.size属性有什么作用,以及如何根据场景调整它
|
6天前
|
大数据
大数据 - ODS&DWD&DIM-SQL分享
大数据 - ODS&DWD&DIM-SQL分享
12 0
|
27天前
|
监控 前端开发 SQL
ODPS SQL问题之在何种情况下建议使用Distributed Map Join
ODPS SQL问题之在何种情况下建议使用Distributed Map Join
|
27天前
|
SQL 分布式计算 MaxCompute
ODPS SQL问题之为什么使用odps.sql.groupby.skewindata = true优化后,逻辑执行计划会发生改变如何解决
ODPS SQL问题之为什么使用odps.sql.groupby.skewindata = true优化后,逻辑执行计划会发生改变如何解决
|
27天前
|
SQL 分布式计算 监控
ODPS SQL问题之在ODPS SQL中,Shuffle的概念是什么
ODPS SQL问题之在ODPS SQL中,Shuffle的概念是什么
|
27天前
|
存储 分布式计算 资源调度
ODPS SQL问题之ODPS逻辑层包含哪些角色,它们各自的功能是什么
ODPS SQL 问题之ODPS逻辑层包含哪些角色,它们各自的功能是什么
|
29天前
|
SQL Java 大数据
开发与运维应用问题之大数据SQL数据膨胀如何解决
开发与运维应用问题之大数据SQL数据膨胀如何解决