当我们谈【数据仓库】的时候,我们在谈什么?
本文共1800字,预计阅读时长 10 min
一、数仓如何产生价值
当企业需要对不同来源、不同形式、不同主题的数据整合起来,供给数据分析、数据挖掘、数据报表使用时,有这么一个中间层将各种原始数据科学地加工处理成下游需要的样子。这个中间层就是数据仓库产生价值的地方。
二、常见架构
2.1 数据垂直划分--分层
大多数的互联网公司的数仓结构,粗略的看一般都是分三层:ODS(操作数据层)、CDM(公共维度模型层)、ADS(应用数据层),只是各个公司中间的CDM层的细分会有所不同,甚至对于同一公司,其中间层的结构也是随着业务的发展而不断演化的,所以下面介绍的CDM层内部划分也仅供参考。
2.2 数据水平划分--数据域
由于数仓是将企业内的各个业务板块、主题数据都放在一起,因此将这些数据根据业务过程或维度抽象成一个个的集合是十分有意义的。在划分数据域时,需要既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含到已有的数据域中或者扩展新的数据域。
三、方法论
3.1 维度建模理论
对于维度模型的建设,通常采用四步法:
1️⃣选择业务过程:
可以是单个业务事件,比如交易的支付,退款。
也可以是某个事件的状态,比如当前的帐户余额。
2️⃣选择粒度:
预判所有分析需要细分的程度,从而决定选择的粒度。
3️⃣识别维表:
基于粒度设计维表,包括维度属性,用于分析时进行分组和筛选。
4️⃣选择事实:
确定分析需要衡量的指标。
3.2 总线矩阵
基于维度建模的理论基础,便可以开始构建总线矩阵,包括以下两步。其中,关于总线矩阵中的各个名词术语解释如下:
名词术语解释
数据域面向业务分析,将业务过程或维度进行抽象的集合
业务过程指企业的业务活动事件,如下单、支付、退款都是业务过程
时间周期用来明确数据统计的时间范围或时间点
修饰词指除了统计维度以外的限定词,如日志域的访问终端类型下有PC端、无线端
度量/原子指标基于某一业务过程下的不可再拆分的指标,如支付金额
维度维度用来反映业务的一类属性,这类属性构成一个维度,如地理维度、时间维度
维度属性维度属性隶属于一个维度,如地理维度里面的国家名称、国家ID、省份名称等
派生指标派生指标=原子指标+修饰词+时间周期
a.梳理业务过程和数据域的关系
例如对于一个电商类公司的数据域和业务过程可能包括:
数据域业务过程
商品域发布、上架、下架
日志域曝光、浏览、点击
交易域加购、下单、支付、退款、确认收货
客服销售域咨询服务、leads管理
互动域发帖、评论、分享
信用风控域评价、投诉
仓配域采购、配送
b.构建一致性维度
对于不同的业务过程,很可能存在相同的分析维度,因此要保证不同业务过程分析时的维度属性是一致的。
3.3 指标体系
a.原子指标
命名规则:动作+度量
b.派生指标
命名规则:原子指标+时间周期+修饰词
类别:
1️⃣事务型指标:对业务活动进行衡量的指标,如新发商品数、订单支付金额;
2️⃣存量型指标:对实体对象的状态统计,如商品总数、注册会员数,时间周期一般是‘历史至今’;
3️⃣复合型指标:是在前两者的基础上复合而成的,常见的有比率型、比例型、统计型、排名型、对象集合型,如浏览下单转化率、最近7天点击量top10的商品集合
3.4 维度设计
a.选择维度
b.确定主维表
c.确定相关维表
d.选择维度属性
e.反规范化,将雪花型模型中的多层次属性合并到单个维表中
3.5 事实表设计
需要先明确的是,事实表中伴随的是各类指标,这些指标分为
可加性:可以按照事实和任意关联的维度进行汇总
半可加性:可以按照事实和部分关联的维度进行汇总,比如库存可以根据地点、商品进行汇总,但把一年中每个月的库存量加起来却是没有意义的
不可加性:完全不具有可加性,比如比率型指标。
接下来,引入事实表的三种类型:
事务事实表:用来描述业务过程,保存的是原子指标。
周期快照事实表:一般按照某种时间周期间隔来记录事实
累计快照事实表:记录的是过程开始和结束之间的关键步骤事实,通常多个日期字段来记录关键时间节点,且随着生命周期的变化,记录也会随之改变
事实表设计的8个原则
尽可能包含所有与业务过程相关的事实
只选择与业务相关的事实
分解不可加性指标为可加性的
在选择维度和事实之前必须先声明粒度
再同一个事实表中不能有多种不同粒度的事实。例如在订单表中,如果存在多个订单对应一个交易订单时,交易订单的事实不应放进来。
事实的单位要保持一致
对事实的null值要处理
利用退化维度提高事实表的应用性
以上
ps:这篇文章是基于我在数仓方面的工作理解,以及借鉴阿里数仓建设的相关理论,摘取出来的。可能某些地方说得也不一定全面和客观,尤其是方法论这块,在未来的工作中还是需要不断地实践和归纳总结,在这里也仅给大家做一个参考思路,更多细节如果感兴趣的话,欢迎一起探讨。
你可能感兴趣的往期文章: