关注公众号,回复关键字 【资料】,获取【10万字大数据框架面试知识点】与【大数据开发的命令手册】

事实表设计方法

事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用(外键)以及该业务过程的度量。
一般设计会遵循以下四个步骤:

1. 选择业务过程及确定事实表类型

通常情况下,一个业务过程对应一张事实表。

2. 声明粒度

精确定义每张事实表的每行数据表示什么,按照业务尽可能选择最细粒度,以此来应各种细节程度的需求。

3. 确定维度

确定与每张事实表相关的维度有哪些? 维度的丰富程度就决定了模型能够支持的指标丰富程度。

4. 确定事实

每个业务过程的度量值(通常是可累加的数字类型的值,例如:次数、个数、件数、金额等)。细分如下:

(1)可加事实

可加事实是指可以按照与事实表相关的所有维度进行累加,例如事务型事实表中的事实。

(2)半可加事实

半可加事实是指只能按照与事实表相关的一部分维度进行累加,例如周期型快照事实表中的事实。比如库存,库存事实可以按照仓库或者商品维度进行累加,但是不能按照时间维度进行累加,因为将每天的库存累加是不科学的。

(3)不可加事实

不可加事实是指完全不具备可加性,例如比率型事实。不可加事实通常需要转化为可加事实,例如比率可转化为分子和分母。

开发指标过程中,指标定义总结以下公式(仅供参考)

指标 = 维度 + 度量 + (条件)

其中度量:基于事实表中可以进行统计的数据属性,如: 金额, 次数等。

映射到SQL就是

select 度量 from table where 条件 group by 维度

事实表设计原则

  1. 尽可能包含所有与业务过程相关的事实
  2. 只选择与业务过程相关的事实
  3. 分解不可加性事实为可加的组件
  4. 在选择维度和事实之前必须先声明粒度
  5. 在同一个事实表中不能有多种不同粒度的事实
  6. 事实的单位要保持一致
  7. 对事实的 null 值要处理
  8. 使用退化维度提高事实表的易用性

什么是维度退化?

维度退化的维度表可以被剔除,从而简化维度数据仓库的模式。因为简单的模式比复杂的更容易理解,也有更好的查询性能。
当一个维度没有数据仓库需要的任何数据时就可以退化此维度。需要把维度退化的相关数据迁移到事实表中,然后删除退化的维度。
维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为“维度退化”。与其他存储在维表中的维度一样 , 维度退化也可以用来进行事实表的过滤查询、实现聚合操作等。

比如说订单id,这种量级很大的维度,没必要用一张维度表来进行存储,而我们进行数据查询或者数据过滤的时候又非常需要,所以这种就冗余在事实表里面,这种就叫退化维度,citycode这种我们也会冗余在事实表里面,但是它有对应的维度表,所以它不是退化维度。

三种类型

事务型事实表

是什么

事务事实表用来记录各业务过程,跟踪时间上某点的度量事件,它保存的是各业务过程的原子操作事件,即最细粒度。

场景

事务型事实表可用于分析与各业务过程相关的各项统计指标,由于其保存了最细粒度的记录,可以提供最大限度的灵活性,可以支持无法预期的各种细节层次的统计需求。

不适合干什么

(1)存量型指标不适合

比如说商品库存,账户余额… 对于这种存在进进出出(加或减操作)不适合。
一张存储商品的进货的原子操作事件,一张存储商品出库的原子操作事件。如果要统计当日的库存又多少,这就需要对进货表和出库表进行操作,需要一正一反地区分对库存的影响。所以在写代码或者sql过程还是执行效率都会打折扣。

(2)多事务关联统计不适合

比如在订单中,建立了下单事务事实表和支付事务事实表,现在指标统计某个时间内用户下单到支付的时间间隔的平均值,这就需要这两个表的Join操作,然而,订单在大型公司属于达标,大表 Join 大表 你可想而知。

周期型快照事实表

周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,一般周期可以是每天、每周、每月、每年等。主要用于分析一些存量型或者状态型指标

场景

存量型:例如对于商品库存、账户余额这些存量型指标,业务系统中通常就会计算并保存最新结果,所以定期同步一份全量数据到数据仓库,构建周期型快照事实表,就能轻松应对此类统计需求。

状态型:例如对于空气温度、行驶速度这些状态型指标,由于它们的值往往是连续的,我们无法捕获其变动的原子事务操作,所以无法使用事务型事实表统计此类需求。而只能定期对其进行采样,构建周期型快照事实表。

累积型快照事实表

用来描述过程开始和结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个时间字段来记录关键时间点,当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改。

场景

如交易流程中的下单、支付、发货、确认收货业务过程。会具体记录下单时间,支付时间,发货时间,收获时间。如果统计某个时间内用户下单到支付的时间间隔的平均值。这样就轻松搞定。

对比

- 事务型事实表 周期型事实表 累积型快照事实表
时间 离散事务时间 每天、每周、每月、每年等 多个时间字段来记录关键时间点
粒度 每行代表实体的一个事务 每行代表某时间周期的一个实体 每行代表一个实体的生命周期
数据加载方式 insert insert insert/update

数仓:事实表设计方法,原则和三种类型选择相关推荐

  1. php表单数据类型,form表单中enctype属性的三种类型

    1.form表单中enctype属性的三种类型 form表单中enctype属性可以用来控制对表单数据的发送前的如何进行编码,enctype有三种,分别为: multipart/form-data不对 ...

  2. 大数据之路—— 事实表设计

    十一.数据模型篇-- 事实表设计 11.1 事实表基础 11.1.1 事实表特性 11.1.2 事实表设计原则 11.1.3 事实的设计准则 11.1.4 事实表设计方法 11.2 事务事实表 11. ...

  3. 大数据之路读书笔记-11事实表设计

    大数据之路读书笔记-11事实表设计 文章目录 大数据之路读书笔记-11事实表设计 11.1 事实表基础 11.1.1 事实表特性 11.1.2 事实表设计原则 11.1.3 事实表设计方法 11.2 ...

  4. 维度建模的事实表设计

    事实表基础 事实表特性 事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量. 事实表中一条记录所表达的业务细节 ...

  5. OneData方法论-事实表设计

    事实表设计 事实表特性 事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计. 事实表中一条记录所表达的业务细节程度被称为粒度,粒度可以通过两种方式来表达:一种是维度属性组合所表示的细节程度,一 ...

  6. 数仓维度表的作用和好处

    数仓维度表的作用和好处 1.缩小了事实表的大小. 2.便于维度的管理和维护,增加,删除和修改维度的属性,不必对事实表的大量记录进行改动. 3.维度表可以为多个事实表重用,以减少重复工作.

  7. 数据仓库维度建模——事实表设计

    一. 事实表相关概念 1. 粒度 1.1 什么是粒度 事实表中一条记录说表达的业务细节程度被称为粒度. 1.2 两种常用表现形式 (1)使用维度属性组合来表示的细节程度. (2)表示的具体的业务含义. ...

  8. 尚硅谷4.0数仓项目整体设计要点记录

    项目部署 虚拟机环境配置下载 整体设计 日志划分 业务日志批量更新,用户行为日志实时更新 虚拟机 虚拟机登录 root root sudo systemctl start/status mysqld ...

  9. 大数据之路、阿里巴巴大数据实践读书笔记 --- 第十一章、事实表设计

    本章节与上一章节第十章一样,都是本书最难理解的部分,建议如果有不理解的部分,可以先标记,后面实战后再消化. 一.事实表基础 事实表特性 事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过 ...

最新文章

  1. get 和 post
  2. R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
  3. linux cat命令源码,每天一个linux命令:cat 命令
  4. Asp.net控件之异同:HTML控件与Web服务器控件
  5. 【学员分享】程序员效率神器,最常用VIM插件安装大全
  6. c语言均值滤波程序,均值滤波C语言代码实现的一种简单方式
  7. python将元祖设为整形_python基础(5)---整型、字符串、列表、元组、字典内置方法和文件操作介绍...
  8. Struts2中Action各种转发类型
  9. 数学知识与计算机科学中的应用,浅谈计算机科学技术在数学思想中的应用
  10. 通用数据链接(UDL)的用法
  11. 是否要从单片机转为嵌入式Linux?
  12. 谷歌开源缓存框架Guava Cache
  13. (滁院20级计科专用)期末考试复习-操作系统
  14. K近邻(K Nearest Neighbor-KNN)原理讲解及实现
  15. 转载:通信里 星座图 到底是什么
  16. Fyne 折腾手记:开发一个简易桌面应用
  17. 【数据应用案例】人群优选算法模型,挖掘品牌潜客
  18. leetcode 两数相加,在ubuntu上编译通过,显示结果了,在leetcode上报错了,找错在哪?
  19. 16个优秀外国网站教你网站设计[zt]
  20. php生成有二维码的背景图片

热门文章

  1. 非项目活动的时间怎么跟踪?
  2. java获取扩展名_Java获取文件扩展名称
  3. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶
  4. java struts2 漏洞_Struts2漏洞利用
  5. ruby + nokogiri实现将天涯易读全帖转换成txt文件的功能
  6. 地平线发布高性能大算力整车智能计算平台战略;环旭电子越南厂近日正式投产;三安集成滤波器首获平台认证 | 全球TMT...
  7. 销售清单怎么打印有什么软件
  8. smartform解决越南文预览正常 打印后字符乱码
  9. taglib指令作用以及属性
  10. 传感器实验——RFID RC522