发布于 

维度建模

在数据驱动四步骤中,数据采集之后的步骤便是数据建模,值得注意的是,这里的数据建模我个人理解便是数仓建设理论中的维度建模,通过维度建模来组织数据流,即这一步就是搭建数仓的过程。

待更新…

数仓的痛点


一、业务现状

当前业务处于快速发展阶段,大数据基础平台选择的是阿里的maxcompute平台,但是数仓还未搭建,目前的数据需求全靠BI依据不同需求手动创建ETL过程,然后在redash上进行展示,该方式需要BI从源数据进行ETL,最终到数据展现,开发周期长,无法即时响应运营方需求,且由于不同BI统计口径的不同,无法多维度分析同一问题。

我负责社区板块的业务,该业务是整体业务的一个较为重要的子版块,处于初始阶段,目前处于多批次循环迭代中,由于业务方向及产品形态的变化,需要多次更新调整数据计算逻辑。并且由于埋点及业务数据的不完善,经常需要校验异常数据,且部分指标至今无法确保准确性。所以,需要在社区业务基础上搭建数仓,打通数据埋点到数据展示的全流程。

本文参考阿里maxcompute平台的文档,在maxcompute的基础上构建数仓数仓构建流程

数仓构建流程图

文档上的基本概念:

  • 业务板块:比数据域更高维度的业务划分方法,适用于特别庞大的业务系统。
  • 维度:维度建模由Ralph Kimball提出。维度模型主张从分析决策的需求出发构建模型,为分析需求服务。维度是度量的环境,是我们观察业务的角度,用来反映业务的一类属性 。属性的集合构成维度 ,也可以称为实体对象。例如, 在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。
  • 属性(维度属性):维度所包含的表示维度的列称为维度属性。维度属性是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。
  • 度量:在维度建模中,将度量称为事实 , 将环境描述为维度,维度是用于分析事实所需要的多样环境。度量通常为数值型数据,作为事实逻辑表的事实。
  • 指标:指标分为原子指标和派生指标。原子指标是基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,是具有明确业务含义的名词 ,体现明确的业务统计口径和计算逻辑,例如支付金额。
    • 原子指标=业务过程+度量
    • 派生指标=时间周期+修饰词+原子指标,派生指标可以理解为对原子指标业务统计范围的圈定。
  • 业务限定:统计的业务范围,筛选出符合业务规则的记录(类似于SQL中where后的条件,不包括时间区间)。
  • 统计周期:统计的时间范围,例如最近一天,最近30天等(类似于SQL中where后的时间条件)。
  • 统计粒度:统计分析的对象或视角,定义数据需要汇总的程度,可理解为聚合运算时的分组条件(类似于SQL中的group by的对象)。粒度是维度的一个组合,指明您的统计范围。例如,某个指标是某个卖家在某个省份的成交额,则粒度就是卖家、地区这两个维度的组合。如果您需要统计全表的数据,则粒度为全表。在指定粒度时,您需要充分考虑到业务和维度的关系。统计粒度常作为派生指标的修饰词而存在。

注意,本文的数仓构建只是基于整体业务中的其中一个社区业务板块进行构建,下图是各基本概念之间的关系:

基本概念之间的关系

二、数据调研

(一)业务调研

当前业务类型:类似抖音、快手的短视频社区,属于电商平台的一个子版块

业务属性:媒体、导购、社区、工具

业务价值:消费决策

目前业务子类型:短视频、话题、鉴宝

业务形态:ugc短视频、鉴定短视频、社区直播、鉴定直播、话题页、类目页

一句话概括:做国风好物圈子里的什么值得买

(二) 需求分析

通过之前的业务对接,我们对数仓有以下的需求:

  1. 确保数据准确无误

  2. 区分用户类型

  3. uv下降能快速定位原因

  4. 能快速响应运营的数据需求

  5. 能满足运营的多种数据需求

考虑到商业数据分析的四层能力模型,我们也希望该数仓能够至少满足到第二个层级的需求,即需要了解到为什么发生。

商业分析的四个层级

结合业务需求以及osm模型,最终梳理的数据需求如下:

该指标体系的梳理过程见文章:创建数据指标字典

OSM模型(Obejective,Strategy,Measurement)分别代表业务目标、业务策略、业务度量。

O:用户使用产品的目标是什么?产品满足了用户的什么需求?

S:为了达成上述目标我采取的策略是什么?

M:这些策略随之带来的数据指标变化有哪些?

我们搭建指标体系是为了更好地发现用户的问题,并且去解决。所以我们需要站在用户的场景去考虑整体的内容。

具体参考:GrowingIO

主要过程

image-20200213173031432

三、数据域划分

数据仓库是面向主题(数据综合、归类并进行分析利用的抽象)的应用。数据仓库模型设计除横向的分层外,通常也需要根据业务情况进行纵向划分数据域。数据域是联系较为紧密的数据主题的集合,是业务对象高度概括的概念层次归类,目的是便于数据的管理和应用。

业务过程可以概括为一个个不可拆分的行为事件。用户的业务系统中,通过埋点或日常积累,通常已经获取了充足的业务数据。为理清数据之间的逻辑关系和流向,首先需要理解用户的业务过程,了解过程中涉及到的数据系统。

划分数据域是为了便于数据的管理和应用,考虑到当前业务板块从属于整体app,故暂时先按照业务过程进行数据域的划分。

订单事实表的业务主题是一个订单,

四、定义维度与构建总线矩阵

明确每个数据域下有哪些业务过程后,即可构建总线矩阵。您需要明确业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度。

最重要的就是一致性维度和一致性事实,

事实表的衡量依据是是否是主体的业务过程。

(一)构建宏观矩阵

宏观矩阵是业务主题和数据主题的关系

(二)构建微观矩阵

微观矩阵是数据主题和维度的关系

五、数仓分层

依据上一步骤明确的总线矩阵,构建星型模型,区分事实表和维度表。

按照上一步骤,规划星型模型如下:

维度表:user身份标识表,使用oneid

六、技术架构选型

阿里云的maxcompute,

七、数仓分层

ADS

CDM:dwd,dws

dwd,对数据轻度清洗

dws,划分事实表和维度表

ODS:原始数据来源

dwd:

八、层次调用规范

不允许跨层调用数据,这样违背了数仓设计的初衷,

参考资料

数仓构建流程

数仓蓝图:如何优雅地规划数仓体系

如何优雅地设计数据分层

什么是数据倾斜

MapReduce极简教程

关于数据质量监控的一些思路分享

大数据/数仓面试灵魂30问

系列|数仓实践第三篇NO.3『拉链表』

数据仓库系列

漫谈 | 大牛带你从0到1构建数据仓库实战