建设自己的取数平台:聚合分析

简介: 除明细数据导出外,取数场景中还会涉及到聚合分析。

文中涉及到数仓的内容,均基于阿里云Maxcompute构建的离线数仓为例。


度量与维度


  • 每天的订单量:“日期”就是维度,“订单量”就是度量;
  • 每天每个城市的订单量:“日期”、“城市”就是维度,“订单量”就是度量
  • 每个订单的价格:“订单”就是维度,“价格”就是度量
  • 每个用户的年龄:“用户”就是维度,“年龄”就是度量
  • ……


通过以上例子,会比较直观的区分出:同样都是指标,哪些是“度量”、哪些是“维度


简单地说,

维度就是描述的角度,比如时间维度、地区维度、人维度、订单维度等;

度量就是具体的数值或者比例,比如XX次数、XX人数、XX金额、XX占比等。



提问:一个指标,在一个分析场景下是“度量”,就永远都只会是“度量”么?


当然不是。


回头看刚才的例子:

  • 每个订单的价格,这里“价格”是度量。那如果我要分析“不同价格区间的订单数量”(20元以内的订单数、20~100元的订单数、100元以上的订单数),“价格”或者说“价格区间”就变成了维度;
  • 每个用户的年龄,这里的“年龄”是度量。那如果我要分析“不同年龄段的用户数量”(18岁以下的用户数、18~25岁的用户数、……),“年龄”或者说“年龄段”就变成了维度;




维度


理解了“度量”和“维度”的区别之后,我们先来看维度如何选择。


维度,相当于SQL里的 group by 子句。一套维度组合的值,可以唯一确定一条结果数据。


可穷举


在聚合分析的场景下,维度的数量必须要是可以穷举的

例如中国的城市,600多个;一年中的日期,365天;……


这就对指标的数据类型有了要求。

  • 数值型:不可作为维度
  • 时间型:可以作为维度
  • 布尔型:可以作为维度
  • 枚举型字符串:可以作为维度
  • 非枚举型字符串:不可作为维度


不可作为维度的数据类型,可以通过创建衍生指标的方式,调整成可以作为维度的数据类型。例如“年龄段”、“价格区间”、“是否包含XX关键词”等方式。


粒度、下钻与上卷


部分维度还会涉及到粒度的问题。


以时间型指标为例。一般我们数仓里会以DATETIME类型保存时间指标,最小单位为秒。虽然直接以“秒”为单位,也满足可穷举的要求。但在实际的聚合分析中,我们通常会以“天”、“月”、“年”为粒度去分析,少数情况还会有以“周”、“小时”、“季度”为粒度的分析场景。这就牵涉到了时间的粒度。需要在选择维度指标的同时,选择粒度。


枚举型字符串中,有一种很特殊的指标:“地理指标”。假设数仓里保存的是四级地址(街道乡镇),满足可穷举的要求。但在实际的聚合分析中,我们可能会以“区县”、“城市”、“省份”、“大区”、“国家”等维度去分析。这里就牵涉到了“下钻/上卷”的问题。需要在选择地理相关指标作为维度的同时,选择“下钻/上卷”的层级。




度量


度量,相当于SQL当中的 SELECT 子句。


命名


度量的含义,可能和所使用的指标相差甚远。所以每个度量都需要重新命名,以获得更好的可读性。默认使用指标名称+聚合方法+序号的方式命名。


聚合方法


大家都知道,在带有group by的SQL中,SELECT后边跟着的、没有出现在group by后边的字段,都需要被聚合函数包裹住。所以,在选择每个度量指标的同时,都需要选择该指标的聚合方法。


常见的聚合方法:

  • 计数(COUNT)。不需要参数,背后执行的就是COUNT(1);
  • 去重计算(COUNT+DISTINCT),可以选择任何数据类型的指标;
  • 求和(SUM),只能选择数值型指标;
  • 平均值(AVG,只能选择数值型指标;
  • 中位数(MEDIAN,只能选择数值型指标;
  • 百分位数(PERCENTILE_APPROX),只能选择数值型指标;
  • 最大值(MAX),可以选择任何数据类型的指标;
  • 最小值(MIN),可以选择任何数据类型的指标;
  • 随机值(ANY_VALUE),可以选择任何数据类型的指标;
  • 去重有序的字符串拼接(WM_CONCAT+DISTINCT+ORDER BY),可以选择任何数据类型的指标;


数据类型


度量的数据类型,绝大部分情况,是可以通过聚合方法和指标推算出来的。


例如“计数(COUNT)”得到的一定是数值型;再比如“最大值(MAX)”并且输入的指标是枚举型字符串,得到的一定是枚举型字符串。


展示格式


展示格式默认与度量对应的指标一致,也支持手动调整。


若度量的数据类型与指标不一致时,必须手动选择。


默认值


即,当度量最终的结果为NULL时,显示的值。主要用于数据导出或数据展示时的美观性。


默认值的数据类型,必须与度量一致。


常见的默认值有:NULL、0、空字符串、减号、-1、-999、1等等。也支持自定义。



条件


在已配置好的维度指标和度量指标中、或者在该主题域下的其他指标中,挑选部分作为整体的筛选条件。


对应到SQL中,

  • 维度指标的条件,相当于WHERE子句;
  • 该主题域下的其他指标的条件,相当于WHERE子句;
  • 度量指标,相当于HAVING子句;



排序及限制行数


在已配置好的所有维度和度量中,可以选择任意指标、以任意顺序做排序,并只展示部分数据行。默认不做排序、展示前10000行。




写在最后


经过上述步骤,我们相当于通过可视化界面,完成了一条带有group by子句的SQL的编辑。形如:

SELECT idx1 AS dim1, idx2 AS dim2,count(1)AS metric1
, sum(idx3)AS metric2
FROM table_from_dw
WHERE idx4 >0GROUPBY idx1, idx2
HAVINGcount(1)>10;


最终的数据会被导出成一张数据表格。



相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
SQL 数据挖掘 BI
建设自己的取数平台:背景
数据从业者,无论是数仓同学、还是数分同学,都对“数据为什么对不上”这类问题深恶痛绝。
1114 0
建设自己的取数平台:背景
|
前端开发 JavaScript API
React Draggable 实现拖拽 - 最详细中文教程 - 卡拉云
React Draggable 是 react 生态中,最好用的拖拽实现库之一。如果你的应用中需要实现拖拽功能,可以尝试用 react-draggable,它可以满足多数情况下的拖拽需求,比如一个弹出设置浮窗,可以相互遮挡的容器之类。在所有 react 拖拽库里(即 react dnd, drag and drop),react-draggable 算是把功能性和易用性平衡得最好的拖拽库了。
4184 0
|
3月前
|
人工智能 安全 Java
Symantec Endpoint Protection 14.4 发布 - 企业级终端安全平台
Symantec Endpoint Protection 14.4 发布 - 企业级终端安全平台
431 2
Symantec Endpoint Protection 14.4 发布 - 企业级终端安全平台
|
人工智能 自然语言处理 程序员
通义灵码2.0全新升级,AI程序员全面开放使用
通义灵码2.0来了,成为全球首个同时上线JetBrains和VSCode的AI 程序员产品!立即下载更新最新插件使用。
4423 85
通义灵码2.0全新升级,AI程序员全面开放使用
|
SQL 数据挖掘 Serverless
手把手进行数据分析,解锁游戏行为画像
本文介绍了一套利用阿里云E-MapReduce StarRocks版进行游戏玩家画像和行为分析的完整流程,旨在帮助开发者构建高性能、低成本的游戏数据分析平台。
645 11
|
监控 调度 流计算
数仓质量监控方案
本监控模块涵盖资源、任务和质量三大方面,包括资源利用率、任务状态与运行时间、数据表及字段质量、以及基线监控等,设置详细报警规则,确保系统稳定高效运行。
520 13
|
存储 运维 监控
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
通过对各个业务线实时需求的调研了解到,当前实时数据处理场景是各个业务线基于Java服务独自处理的。各个业务线实时能力不能复用且存在计算资源的扩展性问题,而且实时处理的时效已不能满足业务需求。鉴于当前大数据团队数据架构主要解决离线场景,无法承接更多实时业务,因此我们需要重新设计整合,从架构合理性,复用性以及开发运维成本出发,建设一套通用的大数据实时数仓链路。本次实时数仓建设将以游戏运营业务为典型场景进行方案设计,综合业务时效性、资源成本和数仓开发运维成本等考虑,我们最终决定基于Flink + Hudi + Hologres来构建阿里云云原生实时湖仓,并在此文中探讨实时数据架构的具体落地实践。
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
|
12月前
|
前端开发 UED
HarmonyOS应用一键置灰指南
一键置灰常用于重大悼念、特殊纪念日、模拟视觉效果及系统维护等场景,可通过组件属性、窗口设置或工具库实现界面整体或局部灰度效果,操作简便且提升用户体验与情感共鸣。
442 0
|
机器学习/深度学习 人工智能 自然语言处理
Java+机器学习基础:打造AI学习基础
随着人工智能(AI)技术的飞速发展,越来越多的开发者开始探索如何将AI技术应用到实际业务场景中。Java作为一种强大的编程语言,不仅在企业级应用开发中占据重要地位,在AI领域也展现出了巨大的潜力。本文将通过模拟一个AI应用,从背景历史、业务场景、优缺点、底层原理等方面,介绍如何使用Java结合机器学习技术来打造一个AI学习的基础Demo。
664 18
|
传感器 数据采集 监控
数据采集器和物联网网关的区别
数据采集器主要用于从各种数据源收集数据。这些数据源可以是传感器(如温度传感器、压力传感器等)、仪表(如电表、水表等)或者其他具有数据输出功能的设备。物联网网关是连接感知层(包含各种传感器和数据采集设备)和网络层(如互联网、局域网等)的关键设备。
754 4