一篇文章搞懂数据仓库:三种事实表(设计原则,设计方法、对比)

目录

1、三种事实表概述

2、三种事实表对比

3、事实表设计 8 大原则

4、事实表设计方法

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

第二步:声明粒度

第三步:确定维度

第四步:确定事实


事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设 计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度 和与业务过程有关的度量。

1、三种事实表概述

事实表有三种类型 : 事务事实表、周期快照事实表累积快照事实表

  • 1.1 事务事实表

也称原子事实表,描述业务过程,跟踪控件或时间上某点的度量事件,保存的是最原子的数据;

个人理解:类似于mysql binlog日志,每一次相关的 change 都记录下来,生成一行新的数据

  • 1.2 周期快照事实表

以一个周期为时间间隔,来记录事实,一般周期可以是每天、每周、每月、每年等;

个人理解:只看某个业务过程,比如订单收货,数据按订单收货时间来切分,周期可以为每天、每月等。

  • 1.3 累积快照事实

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

个人理解:要看整个生命周期的多个业务过程,比如:创建订单 → 买家付款 → 卖家发货 → 买家确认收货。粒度是一个订单一行数据,创建订单时间,付款时间,发货时间,收货时间,分别作为一个字段,便于计算不同业务过程的时间间隔。

 

2、三种事实表对比

 事务事实表 周期快照事实表 累积快照事实表 
时期/时间 离散事务时间点 以有规律的、可预测的 用于时间跨度不确定的不断变化的工作流 
日期维度 事务日期 快照日期 相关业务过程涉及的多个日期 
粒度每行代表实体的一个事务 每行代表某时间周期的一个实体 每行代表一个实体的生命周期 
事实 事务事实累积事实相关业务过程事实和时间间隔事实 
事实表加载 插入 插入 插入与更新 
事实表更新 不更新 不更新 业务过程变更时更新 

3、事实表设计 8 大原则

  • 原则 1:尽可能包含所有与业务过程相关的事实
    • 分析哪些事实与业务过程相关,是设计过程中非常重要的关注点;
    • 在事实表中,尽量包含所有与业务过程相关的事实,即使存在冗余,由于事实通常是数字型,存储开销不会太大;
  • 原则 2:只选择与业务过程相关的事实
    • 如,订单的下单这个业务过程,事实表中不应该存在支付金额这个表示支付业务过程的事实;
  • 原则 3:分解不可加性事实为可加的组件
    • 如,订单的优惠率,应分解为订单原价金额与订单优惠金额两个事实存储在事实表中;
  • 原则 4:在选择维度和事实之前必须先声明粒度
    • 粒度用于确定事实表中一行所表示业务的细节层次,决定了维度模型的扩展性;
    • 每个维度和事实必须与所定义的粒度保持一致;
    • 设计事实表时,粒度定义越细越好,一般从最低级别的原子粒度开始;
      • 因为原子粒度提供了最大限度的灵活性,可以支持无法预期的各种细节层次的用户需求;
  • 原则 5:在同一个事实表中不能有多种不同粒度的事实
    • 疑问:怎么判断不同事实的粒度是否相同?
      • 粒度为票一级;(实际业务中,一个订单可以同时支付多张票)
      • 票支付金额和票折扣金额,两个事实的粒度为 “票级”,与定义的粒度一致;
      • 订单支付金额和订单票数,两个事实的粒度为 “订单级”,属于上一层订单级数据,与 “票级” 事实表的粒度不一致,且不能进行汇总;
      • 如果,以订单金额和订单票数这两个维度汇总总金额和总票数,会造成大量的重复计算;
  • 原则 6:事实的单位要保持一致
    • 如,订单金额、订单优惠金额、订单运费这 3 个事实,应该采用统一的计量单位,统一为元或者分,以方便使用;
  • 原则 7:对事实的 null 值要处理
    • 原因:在数据库中,null 值对常用数字型字段的 SQL 过滤条件都不生效;如,大于、小于、等于、大于或等于、小于或等于;
    • 处理:用 0 代替 null ;
  • 原则 8:使用退化维度提高事实表的易用性
    1. 事实表中存储各种类型的常用维度信息,较少下游用户使用时关联多个表的操作;
    2. 通过退化维度,可以实现对事实表的过滤查询、控制聚合层次、排序数据、定义主从关系等;
    • 易用性:对事实表,更较少关联操作、过滤查询、控制聚合层次、排序数据、定义主从关系等;
  • 在 Kimball 的维度建模中,通常按照星形模型的方式设计,通过事实表的外键关联专门的维表,这种方式来获取维度,谨慎使用退化维表;这与大数据领域的事实表设计不一样;
    • 思路:通过增加冗余存储,减少计算开销,提高使用效率;

 

4、事实表设计方法

Kimball 的维度模型设计 4 步法:选择业务过程、声明粒度、确定维度、确定事实;

当前的互联网大数据环境,维度模型的设计,是基于 Kimball 的四步维度建模方法进行了更进一步的改进:

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

    • 思路:详细分析需求,对业务的整个生命周期进行分析,明确关键的业务步骤,从而选择与需求有关的业务过程;
    • 以实例说明:如何选择业务过程?如何确定事实表类型?
      • 例:淘宝的一个交易订单
        1. 分析业务的生命周期:如上图,业务过程通常使用行为动词表示业务执行的活动
        2. 明确关键的业务步骤:该订单流转的业务过程有 4 个:创建订单 → 买家付款 → 卖家发货 → 买家确认收货;
        3. 根据业务需求,选择与维度建模有关的业务过程;
          • 如,是选择 “买家付款” 这个业务过程,还是选择 “创建订单” 和 “买家付款” 这两个业务过程,具体根据业务情况来定;
        4. 根据所选的业务过程确定事实表类型;
          • 如,选择 “买家付款” 这个业务过程,则事实表类型应为只包含买家付款这一个业务过程的 “单事务事实表”;
          • 如,选择了所有 4 个业务过程,并且需要分享各业务过程的时间间隔,则事实表类型应为包含了所有 4 个业务过程的 “累积快照事实表”;
  • 第二步:声明粒度

    • 粒度的作用:
      1. 粒度的声明,意味着精确定义事实表的每一行所表示的业务含义
      2. 明确的粒度能够确保对实表中行的意思的理解不会产生混淆,保证所有的事实按照同样的细节层次记录;
    • 粒度的选择:尽量选择最细级别的原子粒度,以确保事实表的应用具有最大的灵活性;
      1. 灵活性:支持无法预期的各种细节层次的用户需求;
      2. 对于订单级别,粒度可以定义为最细的订单级别;(如,父子订单,事实表的粒度可以定 “子订单级别” ;)
  • 第三步:确定维度

    • 完成了粒度声明,就意味着确定了主键,对应的维度组合以及相关的维度字段也可以确定了;
    • 选择维度的原则:应该选择能够描述清楚业务过程所处的环境的维度信息;
      • 如,淘宝订单 “付款事务事实表” 中,粒度为 “子订单”,相关的维度有买家、卖家、商品、收货人信息、业务类型、订单时间等;
  • 第四步:确定事实

    • 确定原则:选择与业务过程有关的所有事实,且事实的粒度要与所声明的事实表的粒度一致
    • 思路:可以通过回答 “过程的度量是什么” 来确定;
    • 注意:将不可加性事实分解为可加的组件;(分解的原则:可以通过分解后的可加的属性值,计算得到不可加性事实)

汇总图:

参考文献:阿里巴巴大数据之路

 

整理不易,点个赞吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse快捷键一览

基本使用 Ctrl1 快速修复(最经典的快捷键,就不用多说了)CtrlD: 删除当前行 CtrlAlt↓ 复制当前行到下一行(复制增加)CtrlAlt↑ 复制当前行到上一行(复制增加)Alt↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt↑ 当前行和上面一行交互位置(同上)Alt← 前一…

深思考人工智能蝉联SMP2018多轮语义对话冠军,报告解读多轮人机对话实现过程...

人机对话技术近年来受到了学术界和产业界的广泛关注,其发展影响并推动着语音识别与合成、自然语言理解、对话管理以及自然语言生成等研究的进展。众多产业界巨头相继推出了人机对话技术相关产品,并将人机对话技术作为其公司的重点研发方向。8月3日&#…

操作系统之动态库和静态库

什么是库? 平时在写代码的时候会经常添加一些头文件,添加这些头文件其实是让编译器从一个目录下去寻找这个文件,这个目录就是我们常说的库。在Linux中库一般存放在user/lib目录。库就是将一些常用的函数的目标文件打包在一起,提供…

一篇文章搞懂数据仓库:数据仓库规范设计

目录 一、为什么要进行规范设计? 二、设计规范 - 指标 三、命名规范 - 表命名 3.1 常规表 3.2 中间表 3.3 临时表 3.4 维度表 四、开发规范 五、流程规范 一、为什么要进行规范设计? 无规矩、不方圆。规范设计是在具体开发工作之前制定的&…

asm字节码操作 方法的动态修改增加

asm 4.0 版本 http://forge.ow2.org/plugins/scmsvn/index.php?group_id23 asm是java的字节码操作框架,可以动态查看类的信息,动态修改,删除,增加类的方法。 下面基于4.0版本的一个使用示例,演示了对类Foo进行修改方法…

vim基本命令

最实用的几个: 0(数字0)移动到本行第一个字符上 $ 移动到行尾 。 3$ 移动到下面3行的行尾 gg 移动到文件头。 [[ G(shift g) 移动到文件尾。 ]] /text  查找text,按n健查找下一个,按…

map的详解及常见面试题

map的概念 map是STL中的一个关联式容器,它提供一对一的K-V的数据处理能力,由于这个特性,在我们需要完成Key-Value数据处理的时候可以很方便的调用。map的底层结构是红黑树,这棵树对数据有自动排序的功能,所以map中的数…

无处不在的人工智能,IBM沃森的20个行业应用

来源:资本实验室聚焦前沿科技创新与传统产业升级自2011年在美国综艺电视节目《危险边缘》中一战成名后,IBM的Watson就一直是最受关注的人工智能之一。从菜谱分析到球队管理,从健康顾问到酒店礼宾服务,Watson基于自然语言处理和机器…

自定义店招应该具有的基本功能

今天正式开始制作我的第一套SDK2.0模板。 首先是制作店铺的招牌,因为我个人习惯把首页的样式先制作在PSD中,然后参照PSD,由上至下进行编码实现!在此前,我一度想过使用默认的店招,但是他真的是太不方便了&a…

一篇文章搞懂数据仓库:数据仓库架构-Lambda和Kappa对比

在介绍Lambda和Kappa架构之前,我们先回顾一下数据仓库的发展历程: 传送门-数据仓库发展历程 写在前面 咳,随着数据量的暴增和数据实时性要求越来越高,以及大数据技术的发展驱动企业不断升级迭代,数据仓库架构方面也在…

epoll精讲

epoll - I/O event notification facility 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降…

宇宙和你,本质上其实只是个八维数字?

剑桥大学的数学物理学家Cohl Furey正在寻找粒子物理标准模型和八元数之间的联系。八元数的乘法规则被编码在被称为法诺面的三角图中。来源: 环球科学对于一维、二维乃至四维的数字,人们都不陌生:一维的实数一直都存在于经典物理中&#xff0c…

Fedora 安装QQ2012

1.下载软件包:http://www.everbox.com/f/yLDb2jlpP9WBVvXlSkzC5JKuD9 2.依次执行一下命令 cd /root # 文件存储路径 tar -zxvf qq2012.tar.gz -C /opt # 解压到/opt路径下,注意权限 cd /opt ls cd qq2012/wineapp/qq/ ls ./ins…

一篇文章搞懂数据仓库:数据应用--OLAP

目录 1、OLAP和OLTP的区别 2、OLAP分类 3、OLAP基本操作 4、OLAP选型 1、olap和oltp的区别 OLTPOLAP对象业务开发人员分析决策人员功能日常事务处理面向分析决策模型关系模型多维模型数据量几条或几十条记录>百万于万条记录操作类型增、删、查、改(CRUD)查询为主…

欧洲、美国、中国智慧城市的不同实践路径

来源:远望智库摘要:随着ICT、大数据、物联网等各类新兴技术的不断发展,智慧城市的运营和实践也不断趋于成熟。随着ICT、大数据、物联网等各类新兴技术的不断发展,智慧城市的运营和实践也不断趋于成熟。通过整理欧美各大典型智慧城…

使用IOUtils和FileUtils

文本输出应该比较常用,以前都是通过反复的创建InputStream, InputReader, OutputStream, OutputWriter等去输入输出文本,比较麻烦。Apache提供了一个commons-io.jar包,里面有很多IO相关的工具,比如输入输出文本等,着实…

一个sql生成hive日期维度表

目录 1、日期维度表 2、生成语句 3、用例 在进行日期处理时,有时候会很麻烦,于是小编开发了一张日期维表,供大家参考。 1、日期维度表 num字段名字段中文名描述数据类型1date日期日期 yyyMMdd格式bigint2week星期,数字型星期…

重磅推荐:机器人行业深度报告

来源:WPR随着中国人口红利消失,机器人不仅在制造业上正在替代工人,还将在军事、服务、娱乐等领域取代人类,“钢铁侠”已不仅仅存在于美国科幻电影中,而正走入我们的生活。本篇报告对机器人行业及龙头上市公司进行分析&…

Could not create directory F:\Qt\Test\Error in Util.asciify(build-First_02-Desktop_Qt_5_6_3_Min

第一次使用的Qt的时候出现了这种错误! 相信很多人在第一次使用的时候都会遇到这样的情况,果不其然,搜了一下很多的处理方法,其中有一种我感觉是最有效的,就是改一下他的生成路径就好了,因为这个错误的出现…

POJ 2392 Space Elevator

题目地址:http://poj.org/problem?id2392 题目大意:有一头奶牛要上太空,他有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个 将这些石头叠加起来,问能够达到的最…