数据仓库实战:详解维度建模事实表

news2024/9/21 2:43:51

每个数据仓库都包含一个或者多个事实数据表。其中可能包含业务销售数据,如现金登记事务所产生的数据,通常包含大量的行。事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性维度表的主键,而维度表包含事实记录的特性。

一、事实表基础

1. 事实表特征

事实表作为数仓维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和业务过程有关的度量。事实表中一条记录所表达的业务细节程度被称为粒度(业务中的细节程度)。通常粒度可以通过两种方式来表达:一种是维度属性组合所表示的细节程度,另一种是所表示的具体业务含义。

作为度量业务过程的事实(事实表属性),一般为整型或浮点型的十进制数值,有可加性、半可加性和不可加性三种类型:

  • 可加性事实 是指可以按照与事实表关联的任意维度进行汇总。

  • 半可加性事实 只能按照特定维度汇总,不能对所有维度汇总,比如库存可以按照地点和商品进行汇总,而按时第门章事实表设计丁一间维度把一年中每个月的库存累 加起来则毫无意义。

  • 不可加事实 不具备可加性,比如比率型事实。对于不可加性事实可分解为可加的组件来实现聚集。

2. 有事实的事实表

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

图片

3. 无事实的事实表

无事实的事实表可以用来跟踪事件的发生。例如,在给定的某一天中发生的学生参加课程的事件,可能没有可记录的数字化事实,但该事实行带有一个包含日期、学生、教师、地点、课程等定义良好的外键。利用无事实的事实表可以按各种维度计数上课这个事件。

二、事实表设计规则

  • 尽可能包含所有与业务过程相关的事实;

  • 只选择与业务过程相关的事实;

  • 分解不可加性事实为可加的组件;比如订单的优惠率,应该分解为订单原价金额与订单优惠金额

  • 在选择维度和事实之前必须先声明粒度;

  • 在同一个事实表中不能有多种不同粒度的事实;粒度的声明是事实表设计中不可忽视的重要一步,粒度用于确定事实表中一行所表示业务的细节层次,决定了维度模型的扩展性,在选择维度和事实之前必须先声明粒度,且每个维度和事实必须与所定义的粒度保持一致

  • 在同一个事实表中不能有多种不同粒度的事实;

  • 事实的单位要保持一致;

  • 对事实的 null 值要处理;在数据库中null值对常用的大于或小于等SQL不生效,建议使用零值填充

  • 使用退化维度提高事实表的易用性;目的主要是为了减少下游用户使用时关联多个表的操作。直接通过退化维度实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等

三、事实表设计方法

Kimball的四步维度建模方法:选择业务过程、声明粒度、确定维度、确定事实。

Step 1:选择业务过程及确定事实表类型。

在明确了业务需求以后,接下来需要进行详细的需求分析,对业务的整个生命周期进行分析,明确关键的业务步骤,从而选择与需求有关的业务过程。(业务过程通常使用行为动词表示业务执行的活动)

Step 2:声明粒度。

粒度的声明是事实表建模非常重要的一步,意味着精确定义事实表的每一行所表示的业务含义,粒度传递的是与事实表度量有关的细节层次。明确的粒度能确保对事实表中行的意思的理解不会产生混淆,保证所有的事实按照同样的细节层次记录。

Step 3:确定维度。

完成粒度声明以后,也就意味着确定了主键,对应的维度组合以及相关的维度字段就可以确定了,应该选择能够描述清楚业务过程所处的环境的维度信息。

Step 4:确定事实。

事实可以通过回答“过程的度量是什么”来确定。应该选择与业务过程有关的所有事实,且事实的粒度要与所声明的事实表的粒度一致。事实有可加性、半可加性、非可加性三种类型 , 需要将不可加性事实分解为可加的组件。

Step 5:冗余维度。

冗余维度是在kimball维度建模方法基础上新增的步骤。主要是因为在大数据的事实表模型设计中,需要考虑更多的是提高下游用户的使用效率,降低数据获取的复杂性,减少关联的表数量。所以通常事实表中会冗余方便下游用户使用的常用维度,以实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等操作。

四、有事实的事实表

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

1. 事务事实表

  • 单事务事实表

针对于每个业务过程设计一个事实表,方便每个业务过程进行独立分析研究。

优点:更方便跟踪业务流程细节数据,针对特殊的业务分析场景比较方便和灵活,数据处理上也更加灵活;

弊端:数仓中需要管理太多的事实表,同时跟踪业务流转不够直观

  • 多事务事实表

多事务事实表,将不同的事实放到同一个事实表中,即同一个事实表包含不同的业务过程。多事务事实表在设计时有两种方法进行事实的处理:

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

二是不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签。

优点:能够更直观的跟踪业务流转和当前状态,流程事实集中,方便大部分的通用分析应用场景,由于和业务侧的数据模型设计思路一致,也是目前最常用的事实表设计;

弊端:细节数据跟踪不到位,特殊场景的分析不够灵活;

两种表的设计区别在于对业务流程的拆分思路不同,具体选择事实表的构建思路,需要根据实际的业务确定,一般建议两者结合

父子事实的处理方式:

通过分摊父订单的金额将所有业务过程的度量全部带进淘宝交易事务事实表中,包括下单数量、商品价格、子订单折扣、下单分摊比例、父订单支付金额、父订单支付邮费、父订单折扣、子订单下单金额、子订单下单有效金额、支付分摊比例、子订单支付金额等,将父子事实同时冗余到事务表中。

设计准则:

  1. 事实完整性

    事实表包含与其描述的过程有关的所有事实,即尽可能多地获取所有的度量。

  2. 事实一致性

    在确定事务事实表的事实时,明确存储每一个事实以确保度量的一致性。

  3. 事实可加性

    事实表确定事实时,往往会遇到非可加性度量,比如分摊比例、利润率等,虽然它们也是下游分析的关键点,但往往在事务事实表中关注更多的是可加性事实,下游用户在聚合统计时更加方便。

2. 周期快照事实表

快照事实表在确定的问隔内对实体的度量进行抽样,这样可以很容易地研究实体的度量值,而不需要聚集长期 的事务历史。

特征:

  1. 用快照采样状态

    快照事实表以预定的间隔采样状态度量。这种间隔联合一个或多个维度,将被用来定义快照事实表的粒度,每行都将包含记录所涉及状态的事实。

  2. 快照粒度

    事务事实表的粒度可以通过业务过程中所涉及的细节程度来描述,但快照事实表的粒度通常总是被多维声明,可以简单地理解为快照需要采样的周期以及什么将被采样。

  3. 密度与稀疏性

    快照事实表和事务事实表的一个关键区别在密度上。事务事实表是稀疏的,只有当天发生的业务过程,事实表才会记录该业务过程的事实,如下单、支付等;而快照事实表是稠密的,无论当天是否有业务过程发生,都会记录一行,比如针对卖家的历史至今的下单和支付金额,无论当天卖家是否有下单支付事实,都会给该卖家记录一行。

  4. 半可加性

    在快照事实表中收集到的状态度量都是半可加的。与事务事实表的可加性事实不同,半可加性事实不能根据时间维度获得有意义的汇总结果。

设计实例:

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

    确定粒度、确定维度

  • 混合维度的每天快照事实表

    确定粒度、确定维度、确定状态度量

  • 全量快照事实表

    相比单维度的快照事实表,多了一些冗余维度。例如,商品评价表,多了子订单维度、商品维度、评论者维度。

3. 累计快照事实表

对于类似于研究事件之间时间间隔的需求,采用累计快照事实表可以很好地解决。

如在统计买家下单到支付的时长、买家支付到卖家发货的时长等,事务事实表很难满足,需要用到累计快照事实表。

特征:

  1. 数据不断更新

    针对于实体中的某一实例定期更新。

  2. 多业务过程日期

    累积快照事实表适用于具有较明确起止时间的短生命周期的实体,比如交易订单、物流订单等,对于实体的每一个实例,都会经历从诞生到消亡等一系列步骤。对于商品、用户等具有长生命周期的实体,一般采用周期快照事实表更合适。累积快照事实表的典型特征是多业务过程日期,用于计算业务过程之间的时间间隔。但结合阿里巴巴数据仓库模型建设的经验,对于累积快照事实表,还有一个重要作用是保存全量数据。

特殊处理:

  1. 非线性过程

    淘宝一般流程是:下单、支付、发货、确认收货。但并不是所有的交易都会走此流程,比如买家下单之后不支付或关闭订单。针对这种非线性过程,处理情况主要有以下几种:

    (1)业务过程的统一

    我们以流程结束标志为依据,关闭订单也是结束标志,统一起来。

    (2)针对业务关键里程碑构建全面的流程

    对于没有支付或没有发货的交易订单也将其纳入流程来,相关的业务字段置孔。

    (3)循环流程的处理

    主要解决问题是一个业务过程有多个日期。使用业务过程的第一次发生日期还是最近发生日期,根据用户决定。

  2. 多源过程

    针对多源业务建模,主要考虑事实表的粒度问题。

  3. 业务过程取舍

    当拥有大量的业务过程时,模型的实现复杂度会增加,特别是对于多源业务过程,模型的精合度过高,此时需要根据商业用户需求,选取关键的里程碑。

    物理实现:

    逻辑模型和物理模型密不可分,针对累积快照事实表模型设计,其有不同的实现方式。

    第一种:增量存储 以业务实体的结束时间分区。即每周期仅处理增量部分的数据,针对状态无变化的数据比较适合

    第二种:全量快照 状态有变化,每天的分区存储昨天的全量数据和当天的增量数据合并的结果,对于数据量在可控范围内的情况可以采用如下 保存策略: 如果存储空间和成本可接受,完整存储,确保能够追溯到历史每天数据状态 存储空间有限,考虑移动历史快照数据到冷盘,需要使用的时候可恢复 数据历史状态数据无太大价值,可以考虑部分删除,比如近保留每月最后一天的快照数据

    第三种:拉链 针对于全量表的变化形式,数据量大、但缓慢变化、需要跟踪历史状态,和缓慢渐变维类似。

    设计准则:

    同事务事实表设计一样。

图片

五、无事实的事实表

在维度模型中,事实表用事实来度量业务过程,不包含事实或度量的事实表称为无事实的事实表。虽然没有明确的事实,但可以用来支持业务过程的度量。常见的无事实的事实表主要有如下两种:第一种是事件类的,记录事件的发生。

如阿里巴巴数据仓库中,最常见的是日志类事实表。

第二种是条件、范围或资格类的,记录维度与维度多对多之 间的关系。

如客户和销售人员的分配情况、产品的促销范围等。

六、聚集型事实表

数据仓库的性能是数据仓库建设是否成功的重要标准之一。聚集主要是通过汇总明细粒度数据来获得改进查询性能的效果。通过访问聚集数据,可以减少数据库在响应查询时必须执行的工作量,能够快速响应用户的查询,同时有利于减少不同用户访问明细数据带来的结果不一致问题。如阿里巴巴将使用频繁的公用数据,通过聚集进行沉淀,比如卖家最近 l 天的交易汇总表、卖家最近 N 天的交易汇总表、卖家自然年交易汇总表等。这类聚集汇总数据,被叫作公共汇总层

相对于明细事实表,聚合事实表通常是在明细事实表的基础上,按照一定的粒度粗细进行的汇总、聚合操作,它的粒度较明细数据粒度粗,同时伴随着细节信息的丢失;在数仓层次结构中,通常位于dws层,一般作为通用汇总数据存在,也可以是更高粒度的指标数据。

1. 基本原则

  • 一致性 聚集表必须提供与查询明细粒度数据一致的查询结果。

  • 避免单一表设计 不要在同一个表中存储不同层次的聚集数据;否则将会导致双重计算或出现更糟糕的事情。

  • 聚集粒度可不同 聚集并不需要保持与原始明细粒度数据一样的粒度,聚集只关心所需要查询的维度。

2. 基本步骤

Step 1:确定聚集维度。Step 2:确定一致性上钻。Step 3:确定聚集事实。

常见聚集型事实表

数据仓库中,按照日期范围的不同,通常包括以下类别的聚集事实表

公共维度层-通用汇总

应对大部分可预期的、常规的数据需求,通常针对模式相对稳定的分析、BI指标计算、特征提取等场景,封装部分业务处理、计算逻辑,尽量避免用户直接使用底层明细数据,该层用到的数据范围比较广泛。

日粒度

主要应对模式稳定的分析、BI日报、特征提取场景,同时日粒度也为后续累积计算提供粗粒度的底层,数据范围一般为上一日的数据 。

周期性累积

主要应对明确的周期性分析、BI周期性报表,数据范围一般在某周期内的。

历史累积

顾名思义,历史以来某一特定数据的累积,通常在用户画像、经营分析、特征提取方面场景较多,设计数据范围比较广泛,通常是计算耗时较长的一部分,比如某门店累积营业额、某用户累积利润贡献、用户首次下单时间(非可度量、描述性)。

3. 聚集补充说明

  1. 聚集是不跨越事实的

    聚集是针对原始星形模型进行的汇总,为了获取和查询与原始模型一致的结果,聚集的维度和度量必须与原始模型保持一致,因 此聚集是不跨越事实的。

  2. 聚集带来的问题

    聚集会带来查询性能的提升,但聚集也会增加 ETL 维护的难度。当子类目对应的一级类目发生变更时,先前存在的、已经被汇总到聚集表中的数据需要被重新调整。这一额外工作随着业务复杂性的增加,会导致多数 ETL 人员选择简单强力的方法,删除并重新聚集数据。

 

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

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

相关文章

Lumos学习王佩丰Excel第十三讲:邮件合并

一、简单的邮件合并 1、批量生成多个文档 预览效果: 批量生成多个文档: 2、利用word发送邮件 (1)选择收件人并编写邮件内容 (2)发送邮件 3、每页显示多条记录 将表格形式的选择题转换成word格式。 效果展…

公司内网监控软件是什么?有哪些好用的推荐?精准安排!

企业内网作为公司运营和管理的核心载体,其安全性与效率性直接关系到企业的生死存亡。 如何精准地掌握内网动态,确保信息安全,提升工作效率? 公司内网监控软件,正是这一需求的产物,它如同一位无形的守护者&…

HiPER Calc Pro-高效、强大的数学计算工具

在数字化时代,无论是学生、教师还是科研工作者,准确高效的数学计算都是不可或缺的一环。HiPER Calc Pro(原名HiPER Scientific Calculator高级版)是一款收费的方程式图形计算器应用,它以无广告、多功能的特性&#xff…

第六版页面

基本 明确定义 站点网关mqtt服务器 多个柜子使用的是主从模式 下发一个设备组其他的柜子跟着设置 具体的让后端进行详细管理 前端规范 字体规范 弹出框定义什么应该弹出什么不应该弹出 页面 主页 屏幕宽度有的没设置好 平面地图模式有的没重合好 日志改为告警在上面 日志…

使用 Python 爬虫进行网站流量分析:Referer 头的利用

在互联网时代,网站流量分析是了解用户行为、优化网站结构和提升用户体验的重要手段。本文将介绍如何使用 Python 爬虫技术结合 HTTP Referer 头进行网站流量分析,以及如何实现这一过程。 什么是 HTTP Referer 头? HTTP Referer 头是一个请求…

ubuntu 22.04下载安装及相关配置

一、ubuntu 22.04下载 1.1、官网下载 Get Ubuntu | Download | Ubuntu 官网下载速度比较慢,不是很推荐。 1.2、清华镜像网站下载 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 该方式下载很快,推荐使用。下载方式如下: 1.2.…

WEB渗透免杀篇-Golang免杀

往期文章 WEB渗透免杀篇-加载器免杀-CSDN博客 WEB渗透免杀篇-分块免杀-CSDN博客 WEB渗透免杀篇-Powershell免杀-CSDN博客 WEB渗透免杀篇-Python源码免杀-CSDN博客 WEB渗透免杀篇-C#源码免杀-CSDN博客 WEB渗透免杀篇-MSFshellcode免杀-CSDN博客 WEB渗透免杀篇-Bypass-AMSI-…

协同过滤图书推荐管理系统图书购物网站设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

vcruntime140.dll找不到咋办?vcruntime140.dll文件缺失详细解决方案

在运行基于Visual C的软件时,用户常常遭遇“vcruntime140.dll文件缺失”的提示。这个问题主要是因为系统中缺乏必须的Visual C运行库文件。如果你正面临这一问题,本文将提供几种简洁有效的解决方案,确保你的应用程序能够顺利运行。这些方法简…

基于Java+SpringBoot+Vue的IT技术交流和分享平台

基于JavaSpringBootVue的IT技术交流和分享平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式&#x1f3…

Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换

技术背景 我们在做Android端同屏的时候,开发者希望可以高版本的Android系统上,在设备支持的前提下,可以采集到扬声器输出的audio,并支持和麦克风采集的audio相互切换,实现无纸化|智慧教室同屏不同audio模式的输出。An…

Scrapy框架妙用:如何添加代理IP让数据采集更顺畅

什么是Scrapy框架? Scrapy框架是Python编写的一个强大、快速的网络爬虫和网页抓取框架。它能帮助开发者轻松地从网站上提取数据,并进行数据处理和存储。Scrapy的设计灵活且功能强大,适用于各种数据采集任务。 为何需要在Scrapy中添加代理IP…

【fastapi框架:jinja2模板、ORM操作、中间件与CORS】

## 五、jinja2模板要了解jinja2,那么需要先理解模板的概念。模板在Python的web开发中⼴泛使⽤,它能够有效的将业务逻辑和页⾯逻辑分开,使代码可读性增强、并且更加容易理解和维护。 模板简单来说就是⼀个其中包涵占位变量表⽰动态的部分的⽂件…

百元蓝牙耳机哪个品牌性价比最高?四大高质量耳机爆肝推荐

蓝牙耳机的日常使用非常简便,而且充电也方便。但如今市场中的蓝牙耳机有的质量与价格不匹配,耳机的使用体验不佳,那百元蓝牙耳机哪个品牌性价比最高?关于这一点,作为资深的蓝牙耳机测评师,下面就给大家带来…

2024年下半年软考备考建议

备考建议 第一轮(建议5-10天) 1、了解考试的基本情况,确定是自学还是报班,准备好备考工具; 2、过一下官方教材蓝皮书,借助思维导图对考试科目知识体系结构有大致了解。 第二轮(建议60-80天) 1、按照学习打卡表,一步步学习科目的考…

金贝E-KA1M 5.5T卓越性能,引领行业新高度

金贝 E-KA1M 5.5t 主要适用于家庭、书房、办公室等对噪音有一定要求的环境。它在运行时噪音极低,不会打扰您的日常生活,无论是放在家中还是办公场所,都能悄然为您创造财富。 金贝 E-KA1M 5.5t是一款具有较强算力的静音挖kuang机,其…

Awesome-Chinese-LLM:收集和梳理中文LLM相关的开源模型、应用、数据集及教程等资料

自ChatGPT为代表的大语言模型(Large Language Model, LLM)出现以后,由于其惊人的类通用人工智能(AGI)的能力,掀起了新一轮自然语言处理领域的研究和应用的浪潮。尤其是以ChatGLM、LLaMA等平民玩家都能跑起来…

《图解设计模式》笔记(三)生成实例

五、Singleton模式:只有一个实例 Singleton 是指只含有一个元素的集合。因为本模式只能生成一个实例,因此以 Singleton命名。 示例程序类图 Singleton.java public class Singleton {private static Singleton singleton new Singleton();private Si…

达林顿管阵列ULN2003的用途就是非门(输入和输出的关系)

对于UL2003来说,可以看作是非门。 输入为1,输出为0; 输入为0,输出为高组态[接一个上拉电阻即为1] 下面的可以不用看了,如果你想了解深入一点,可以往下看看。 ULN2003A就是个达林顿管, 一&am…

C++入门——“继承”

一、引入 面相对象的计算机语言有三大特性:“封装”、“继承”、“多态”。今天来讲解一下C的一大重要特性——继承。 通俗理解来讲,继承就和现实生活一样,子辈继承父辈的一些特性,C中的继承也可以这样理解。它允许我们在保持原有…