如何快速实现多指标计算

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 如何快速实现多指标计算

在统计分析应用中,从明细数据计算出来的各种指标是支撑业务的重要数据。但是,要做到快速而且灵活的多指标计算,后台数据源面临多个难题。


多指标计算的一个难题是涉及的明细数据量非常大。政府、金融、能源和工业等各个行业,都在不断产生大量的明细数据。要在几千万甚至上亿的明细数据基础上计算多种指标,还要达到秒级响应的速度,对于传统数据库和大数据技术来说都是一个不小的挑战。


另一个难题是需要同时计算的指标数量非常多。我们常常看到,一个管理页面上就要显示出几十上百个指标供业务人员参考,页面上还有很多可选参数用于计算不同的指标值。而且,业务人员的数量通常也比较多,在高峰时段同时访问指标页面时,会给后台带来大量的计算请求。


在这两个难题的共同作用下,要保证多指标计算的性能非常困难,现有的数据库和大数据技术都难以达到秒级响应速度。所以,大部分指标统计项目都放弃了指标的实时计算方案,采用预先计算的方法,提前将指标计算出来存储在后台,供业务人员查询。这样,指标的计算就变成简单的随机查询,可以达到秒级响应的速度。


但是,预先计算方式也面临一个严重的问题。指标计算过程中,过滤条件有很多种、分组字段有很多类,汇总计算有很多方式。这些种类、方式组合起来形成的指标数量非常惊人。以常见的订单金额和笔数指标为例,过滤条件有时间日期、交易金额、渠道等,分组类型有客户、地区、产品等,统计方式有求和、求平均、最大、最小、topN 等。组合出来的指标如:昨日北美地区 10000-20000 元消费额订单,按照客户和产品分组,汇总平均金额和订单总笔数。这个指标只要稍加改变,就会组合出另外一个新指标。因此,全部指标的总数非常大,要预先计算出来的结果太多,指标计算后台根本无法全部存下。


面对这个问题,多数项目都只能舍弃大部分指标,仅预计算一小部分指标供查询,即使这样也会占用大量的硬盘存储空间。而业务人员只能放弃对更多指标的灵活查询需求,会大大降低指标统计项目对业务的支撑作用。


那么有没有办法既能做到灵活的实时计算,又可以达到秒级响应的速度呢?我们可以从多指标计算的特征入手来达到这个目标。明细数据量很大,通常都是外存存储。多指标计算最主要的过程是对外存大明细表进行遍历,以完成过滤、分组和汇总计算。我们知道,对硬盘上的大文件进行遍历耗时比较长。假如每个指标的计算都要遍历一次大明细表,那么硬盘 IO 就会成为瓶颈,众多指标的计算就不可能做到秒级响应了。如果有办法能够做到一次遍历计算多个指标,就可以大大减少遍历次数,有效提升多指标计算的性能。


但是,关系数据库和大数据平台普遍采用的 SQL 语言没有这种遍历复用的语法,无法写出这样的运算。只能遍历多次,或者寄希望于数据库引擎的自动优化功能。但是实际测试证明,即使是优化引擎做的较好的 Oracle 数据库,也不会自动做遍历复用计算,进行多种分组时还是会对数据表遍历多次。


专业的数据计算引擎 esProc SPL支持这种遍历复用的语法,可以一次遍历计算出多个分组结果,从而实现实时的指标计算。以上面提到的订单指标为例,下面的代码可以一次遍历计算出多种指标:


A
B
1 =file(“orders.ctx”).open()
2 =A1.cursor@m(odate,customer,product,area,amount)
3 cursor A2 =A3.select(odate==… && area==“NorthAmerica” &&…)
4 =B3.groups(customer;sum(amount),count(1)…)
5 cursor =A5.select(odate>=… && customer!=… &&…)
6 =B5.groups(area;avg(amount),top(amount,100),…)
7 cursor =A7.groups(year(odate),product;avg(amount),min(amount)…)
8

A1 打开订单组表。A2 建立多路游标,声明要并行取出的字段名称。


A3 对 A2 游标定义一个管道。B3 对管道定义过滤计算,B4 对过滤的结果进行分组汇总计算,得出第一组指标。


A5 到 B6 也对 A2 游标定义了一个管道,只是过滤条件和分组汇总的方式不同,可以得到第二组指标。


对于 B6 中订单金额前一百名的计算,SPL 也看做是聚合运算,与 SQL 中的大排序方法相比有很大的性能优势。详情参见:TopN 怎样才能跑得快?


A7、B7 对 A2 游标定义了第三个管道,不经过过滤直接分组汇总得到第三组指标。


SPL 执行代码时对 A2 游标做一次遍历,就可以完成全部管道的计算,得到多组指标,从而实现了遍历复用机制。


这个例子是对于单表的遍历复用,SPL 也支持高性能的表间关联计算,参见:如何让 JOIN 跑的更快。


对于需要作去重计算的指标,比如去重客户数等,SPL 提供有序存储、快速去重的技术,参见:SQL 提速:大数据 DISTINCT 和 COUNT(DISTINCT)。


在 SPL 中,可以用很简捷的代码实现这些高性能计算方法,并且和遍历复用协同使用,整体上的性能完全能够满足指标实时计算的要求。


SPL资料


SPL下载

SPL源代码

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7月前
|
自动驾驶 算法 5G
传输延迟的指标是多少
传输延迟的指标是多少
156 0
|
4月前
|
SQL 缓存 数据挖掘
数据平台问题之复合指标生成中维度能力如何处理
数据平台问题之复合指标生成中维度能力如何处理
|
7月前
|
敏捷开发 数据可视化 安全
测试度量指标
测试度量指标
117 0
|
7月前
流量数据指标分析
流量数据指标分析
70 0
|
SQL BI iOS开发
不要再因为数据指标吵架了!
不要再因为数据指标吵架了!
116 0
|
Web App开发 运维 监控
量化日常工作指标
量化日常工作指标
|
存储 数据处理
1.3计算机性能指标
1.3计算机性能指标
226 0
1.3计算机性能指标
|
人工智能 算法 数据挖掘
算法的评估指标
分类:精度(accuracy)、召回率、精确率、F值、ROC-AUC 、混淆矩阵、PRC 回归:RMSE(平方根误差)、MSE(平均平方误差)、MAE(平均绝对误差)、SSE(和方差, 误差平方和)、R-square(确定系数) 聚类:兰德指数、互信息、轮廓系数
208 0
算法的评估指标
|
监控 Java 程序员
如何监控服务的内存指标?
在当今的互联网时代,哪家提供的服务越稳定,这样的的服务越会受到特别的关注。监控服务的各个指标,可以很轻松地了解到当前服务的运行的状态以及是否需要进一步的处理。监控指标是维护一个服务稳定性的必要手段,使用者可以提前地接收到服务的报警以及相关指标的数据变化。最终的目标显而易见,就是维护服务的稳定性。
|
消息中间件 监控 NoSQL