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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*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的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
3月前
|
SQL 存储 分布式计算
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
本文旨在帮助非专业数据研发但是有高频ODPS使用需求的同学们(如数分、算法、产品等)能够快速上手ODPS查询优化,实现高性能查数看数,避免日常工作中因SQL任务卡壳、失败等情况造成的工作产出delay甚至集群资源稳定性问题。
1045 36
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
|
4月前
|
SQL 分布式计算 大数据
SparkSQL 入门指南:小白也能懂的大数据 SQL 处理神器
在大数据处理的领域,SparkSQL 是一种非常强大的工具,它可以让开发人员以 SQL 的方式处理和查询大规模数据集。SparkSQL 集成了 SQL 查询引擎和 Spark 的分布式计算引擎,使得我们可以在分布式环境下执行 SQL 查询,并能利用 Spark 的强大计算能力进行数据分析。
|
6月前
|
SQL 人工智能 分布式计算
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
别再只会写SQL了!这五个大数据趋势正在悄悄改变行业格局
113 0
|
8月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
9月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
353 35
|
8月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
SQL 算法 大数据
为什么大数据平台会回归SQL
在大数据领域,尽管非结构化数据占据了大数据平台80%以上的存储空间,结构化数据分析依然是核心任务。SQL因其广泛的应用基础和易于上手的特点成为大数据处理的主要语言,各大厂商纷纷支持SQL以提高市场竞争力。然而,SQL在处理复杂计算时表现出的性能和开发效率低下问题日益凸显,如难以充分利用现代硬件能力、复杂SQL优化困难等。为了解决这些问题,出现了像SPL这样的开源计算引擎,它通过提供更高效的开发体验和计算性能,以及对多种数据源的支持,为大数据处理带来了新的解决方案。
|
SQL 存储 分布式计算
MaxCompute SQL开发基础
MaxCompute SQL开发
1743 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")

热门文章

最新文章