大数据开发工程师需要了解的【数仓中事实表的设计】

简介: 笔记

(1)如何正确看待事实表


1.png


(2)企业中事实表的设计原则


原则一:尽可能包含所有与业务过程相关的事实

在事实表中应该尽量包含所有与业务过程相关的事实,即使存在冗余,但是因为事实通常为数字类型,带来的存储开销也不会很大。


原则二:只选择与业务过程相关的事实

比如在订单的下单这个业务过程的事实表设计中,不应该存在支付金额这个标识支付业务过程的事实。


原则三:分解不可加性事实为可加的组件

比如订单的优惠率,应该分解为订单原价金额与订单优惠金额两个事实存储在事实表。


原则四:在选择维度和事实之前必须先声明粒度

建议从最低级别的原子粒度开始,因为原子粒度最大限度的灵活性。


原则五:在同一个事实表中不能有多种不同粒度的事实

事实表中的所有事实需要与表定义的粒度保持一致,在同一个事实表中不能有多种不同粒度的事实。

2.png


原则六:事实的单位要保持一致

对于同一个事实表中事实的单位,应该保持一致。比如原订单金额、订单优惠金额、订单运费金额这三个事实,应该采用一致的计量单位,统一为元或者分。


原则七:对事实的NULL值要处理

NULL值对常用数字类型字段的SQL过滤条件都不生效,建议用0补充。


原则八:使用退化维度提高事实表的易用性

通过增加冗余存储的方式减少计算开销,提高使用效率,大多数会采用退化维度的方式。


(3)事物事实表的设计流程


第一步:选择业务过程及确定事实表类型

分析整个业务生命周期,明确关键业务步骤,选择与需求有关的业务过程。


电商交易订单的流转过程:

3.png

第二步:声明粒度

精确定义事实表的每一行所表示的业务含义,粒度传递的是与事实表度量有关的细节层次。

应该尽量选择最细级别的原子粒度

4.png

第三步:确定维度

选择能描述清楚业务过程所处环境的维度信息。


5.png

第四步:确定事实

确定过程度量,将不可加事实分解为可加。

6.png


第五步:冗余维度


通常事实表中会冗余方便下游用户使用的常用维度。


(4)深入事物事实表的设计


单事务事实表设计案例

7.png

多事务事实表

多事务事实表,将不同的事实放到同一个事实表中,即同一个事实表包含不同的业务过程。


多事务事实表在设计时有两种方法进行事实的处理:


第一种:不同业务过程的事实使用不同的事实字段进行存放

比如交易事务事实表,可以把流程中的下单、支付、成功完结三个业务过程放进去。

8.png




第二种:不同的业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签比如商品收藏事务事实表。

9.png


单事务事实表与多事务事实表的比较


1.业务过程

对于单事务事实表,一个业务过程建立一个事实表,只反映一个业务过程的事实;对于多事务事实表,在同一个事实表中反映多

个业务过程。多个业务过程是否放到同一个事实表中,首先需要分析不同业务过程之间的相似性和业务源系统。比如电商交易的

下单、支付和成功完结这三个业务过程是存在相似性的,都属于订单处理中的一环,并且都来自于交易系统,因此适合放到同一

个事务事实表中


2.粒度和维度

在考虑是采用单事务事实表还是多事务事实表时,另一个关键点就是粒度和维度,在确定好业务过程后,需要基于不同的业务过

程确定粒度和维度,当不同业务过程的粒度相同,同时拥有相似的维度时,此时就可以考虑采用多事务事实表。如果粒度不同

则必定是不同的事实表。比如交易中支付和发货有不同的粒度,则无法将发货业务过程放到交易事务事实表中。


3.事实

对于不同的业务过程,事实往往是不同的,单事务事实表在处理事实上比较方便和灵活,仅仅体现同一个业务过程的事实即可

而多事务事实表由于有多个业务过程,所以有更多的事实需要处理。如果单一业务过程的事实较多,同时不同业务过程的事实又

不相同,则可以考虑使用单事务事实表,处理更加清晰;若使用多事务事实表,则会导致事实表零值或空值字段较多


4.下游业务使用

单事务事实表对于下游用户而言更容易理解,关注哪个业务过程就使用相应的事务事实表;而多事务事实表包含多个业务过程

用户使用时往往较为困惑。


5.计算存储成本

针对多个业务过程设计事务事实表,是采用单事务事实表还是多事务事实表,对于散据仓库的计算存储成本也是参考点之一,当

业务过程数据来源于同一个业务系统,具有相同的粒度和维度,且维度较多而事实相对不多时,此时可以考虑使用多事务事实表

不仅其加工计算成本较低,同时在存储上也相对节省,是一种较优的处理方式

10.png

(5)怎么理解周期快照事实表


快照事实表的设计有些区别与事务事实表设计的性质。事务事实表的粒度能以多种方式表达,但快照事实表的粒度通常以维度形式声明;


事务事实表是稀疏的,但快照事实表是稠密的;

11.png12.png


单维度的每天快照事实表:

13.png


多维度的每天快照事实表:

在数据仓库维度建模时,对于事务事实表和快照事实表往往都是成对设计的,相互补充

以满足更多的下游统计分析需求。


(6)累计快照事实表的设计


设计过程

第一步:选择业务过程

比如:统计事件时间间隔的需求,买家付款与卖家发货的时间间隔,卖家发货与买家确认

收获的时间间隔。

14.png

第二步:确定粒度

对子订单的事件发生时间进行更新。

15.png

第三步:确定维度

四个业务过程对应的时间字段。

16.png

第四步:确定事实

累计快照事实表解决的最最要的问题是统计不同业务过程之间的时间间隔,建议将每个过程的时间间隔作为事实放在事实表中。

17.png


第五步:退化维度

在物理实现中将各维度的常用属性退化到事实表中,以大大提高对事实表的过滤查询。


累计事实表的特点

18.png


(7)三种事实表的应用场景


19.png

相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
1月前
|
存储 JSON 大数据
大数据离线数仓---金融审批数仓
大数据离线数仓---金融审批数仓
118 1
|
4月前
|
SQL Oracle 物联网
助力工业物联网,工业大数据之数仓维度层DWS层构建【十二】
助力工业物联网,工业大数据之数仓维度层DWS层构建【十二】
45 0
|
4月前
|
SQL 分布式计算 数据可视化
滴滴出行大数据数仓实战
滴滴出行大数据数仓实战
114 0
滴滴出行大数据数仓实战
|
4月前
|
大数据 Linux 网络安全
大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)
大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)
123 0
|
1月前
|
分布式计算 大数据 Hadoop
数据仓库(13)大数据数仓经典最值得阅读书籍推荐
从事数仓工作,在工作学习过程也看了很多数据仓库方面的数据,此处整理了数仓中经典的,或者值得阅读的书籍,推荐给大家一下,希望能帮助到大家。建议收藏起来,后续有新的书籍清单会更新到这里。
157 2
数据仓库(13)大数据数仓经典最值得阅读书籍推荐
|
2月前
|
SQL 分布式计算 数据库
离线数仓--大数据技术之DolphinScheduler
离线数仓--大数据技术之DolphinScheduler
135 2
|
4月前
|
SQL 存储 分布式计算
助力工业物联网,工业大数据之数仓事实层DWB层构建【十七】
助力工业物联网,工业大数据之数仓事实层DWB层构建【十七】
37 0
助力工业物联网,工业大数据之数仓事实层DWB层构建【十七】
|
4月前
|
Java 数据库连接 数据库
Java大数据开发工程师__Spring学习笔记(待更新)
Java大数据开发工程师__Spring学习笔记(待更新)
28 1
|
4月前
|
关系型数据库 MySQL 大数据
大数据开发工程师基本功修炼之Linux学习笔记(四)
大数据开发工程师基本功修炼之Linux学习笔记(四)
110 1
|
4月前
|
大数据 Linux 开发工具
大数据开发工程师基本功修炼之Linux学习笔记(三)
大数据开发工程师基本功修炼之Linux学习笔记(三)
84 0