0 参考列表
优快云:耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)https://notomato.blog.youkuaiyun.com/article/details/120306023
1 概念
1.1 定义
①数据源:数据仓库所有原始数据的来源,包括结构化、非结构化数据.数据形式有数据库、文件系统、实时数据流和API接口.
②数据湖:以原始格式存储大量原始数据的系统.
③数据仓库:是一个在企业管理和决策中面向主题的(数据按主题组织,支持业务分析)、集成的(整合来自不同源的数据,确保一致性)、稳定的(数据一旦进入仓库,通常不会被修改或删除)、随时间变化(数据包含时间戳,支持历史分析)的数据集合.存储经过清洗、转换和集成的数据,提供高性能的查询和分析能力.
④数据集市:数据仓库的子集,提供更细粒度的数据视图,支持特定业务需求的快速查询和分析.
⑤操作型处理(OLTP):用于管理日常事务和操作,特点是高并发、快速响应、频繁数据更新和严格数据一致性.
⑥分析型处理(OLAP):用于数据分析和决策支持,特点是复杂查询、大数据量、较少数据更新和关注数据全面性和准确性.
⑦数据模型:是抽象描述现实世界的一种工具和方法,通过对实体和实体之间关系的定义和描述,来表达实际业务中具体的业务关系.
⑧数据仓库模型:是数据模型中针对数据仓库应用系统的一种特定的数据模型,包含业务模型、领域模型(主题域模型)、逻辑模型、物理模型.
1.2 主题
1.2.1 概念
(1) 主题:在较高层次上将数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域,在逻辑意义上对应企业中某一宏观分析领域所涉及的分析对象.
(2) 主题域:联系较为紧密的主题的集合.
1.2.2 划分方法
(1) 按照业务或者业务过程划分:比如一个靠销售广告位置的门户网站主题域可能会有广告域、客户域等,而广告域可能就会有广告的库存,销售分析、内部投放分析等主题;
(2) 按照功能或者应用划分:比如微信中的朋友圈数据域、群聊数据域等,而朋友圈数据域可能就会有用户动态信息主题、广告主题等;
(3) 按照部门划分:比如可能会有运营域、技术域等,运营域中可能会有工资支出分析、活动宣传效果分析等主题.
1.3 建模方法
1.3.1 实体建模法
将整个业务抽象成实体、事件和说明这三部分,理清实体与实体之间的关联.
①实体:概念主体,指发生业务关系的对象;
②事件:概念主体之间完成一次业务流程的过程,指特定的业务过程;
③说明:针对实体和事件的特殊说明.
1.3.2 范式建模法
通过数据规范化来减少数据冗余,提高数据完整性,实现数据库结构的优化.大部分采用的是三范式建模法.
(1) 特点
①数据表多且松散,数据冗余程度低,数据可以灵活应用.
②在大规模数据统计分析时,多表关联造成资源消耗大、效率低.
(2) 第三范式的要求
①每个属性值唯一,不具有多义性;
②每个非主属性必须完全依赖于整个主键,而非主键的一部分;
③没有传递依赖.
1.3.3 维度建模法
按照事实表和维度表来构建数仓,维度是描述事实的角度,事实是要度量的指标.
2 维度建模
2.1 多维体系结构
2.1.1 总线矩阵(业务矩阵)
总线矩阵是指导维度模型建设的规划性文件,包含业务过程、公共一致性维度.每行代表一个业务过程,每列表示一个公共维度;还包括业务过程与维度间的联系,即业务过程与维度的关联外键.另外可加入主题划分和业务过程包含的度量值.
2.1.2 一致性维度
(1) 总线架构中,多个数据集市中的相同维度需保持一致.在后台建立好的维度同步复制到各个数据集市,这样所有数据集市的这部分维度都是完全相同的.建立新的数据集市时,需要在后台进行一致性维度处理,根据情况来决定是否新增和修改一致性维度,然后同步复制到各个数据集市.
(2 ) 同一数据集市中,两个维度如果有关系,要么就是完全一样的,要么就是一个维度在数学意义上是另一个维度的子集.例如建立月维度的话,月维度的各种描述必须与日期维度中的完全一致.
2.1.3 一致性事实
不同集市的同一事实,需保证口径一致,单位统一.
2.2 建模模式
(1) 星形模式:由一个中心的事实表和多个围绕它的维度表组成,维度表直接与事实表连接.优点是结构简单,易于理解和使用,查询速度较快.缺点是通常不规范化,数据冗余度高.
(2) 雪花模式:由一个中心的事实表和多个维度表组成,但维度表被进一步规范化,分解成多个更小的表.这些表之间通过外键关联.优点是数据冗余度低,更符合数据库规范化原则,减少存储空间.缺点是查询性能可能低于星型模型,因为需要进行多次表连接,设计和维护也相对复杂.
(3) 星座模式:基于多张事实表的,共享维度信息.
2.3 分层模型
2.3.1 作用
①用空间换时间,通过大量的预处理来提升应用系统的用户体验;
②复杂问题简单化,将复杂的任务分解成多层来完成,每一层只处理简单任务,方便定位问题;
③减少重复开发,通过中间层数据能够减少极大重复计算,增加一次计算结果的复用性;
④对敏感数据脱敏,保证数据安全.
2.3.2 层级说明
层级 | 数据来源及建模方式 | 服务领域 | 数据ETL过程描述 |
操作数据层(ODS): Operational Data Store | 数据来源于各业务系统,物理模型和业务系统模型一致 | 为其他逻辑层提供数据,为统一数据视图子系统提供实时查询 | 从业务系统全量或增量抽取,不做清洗转换,直接装载到ODS层 |
公共维度层(DIM) | 由ODS层数据加工生成 | 建立整个企业的一致性维度,与DW层及ADS层组合使用,对事实数据进行聚合与分类 | 从ODS层抽象业务公用的维度及维度属性,生成维度表,视情况决定是否使用维度代理键,确定唯一主键 |
明细数据层(DWD): Data Warehouse Detail | 由ODS层数据加工生成,一般与ODS层保持一样的数据粒度,过滤一些与统计和分析无关的数据 | 为DW层提供各主题业务的明细数据,提供业务系统细节数据的长期沉淀,为未来分析需求的扩展提供历史数据支撑 | 对ODS层进行轻度清洗、转换,如字段合并、数据转换、脏数据处理、异常值处理、维度转代理键等.对相同主题的数据进行适当的聚合. 为支持数据重跑,可额外增加数据业务日期字段,可按年月日进行分表. |
汇总数据层(DWS): Data Warehouse Summary | 由DWD层、ODS层数据加工生成,基于维度建模 | 为DW层及ADS层提供公共指标及汇总数据 | 按照通用的核心维度对数据做粗粒度的聚合汇总,根据业务需求对事实表进行拉宽形成汇总事实表和合并事实表 |
应用数据层(ADS): Application Data Service | 由DW层加工生成,基于维度建模 | 提供给数据产品和数据分析使用的数据 | 基于应用,从DW层对指标进行个性化加工、数据汇总、数据集市组装 |
临时表(TMP) | 存放各分层数据处理过程中产生的临时表 |
3 表类型
3.1 维度表
3.1.1 概念
(1) 维度:表示对数据进行分析时所用的一个量,例如要分析产品销售情况, 可以选择按类别来进行分析,或按区域来分析.维度表信息比较固定,且数据量小.
(2) 代理关键字:一般是指维度表中使用顺序(序列)分配的整数值作为主键,用于维度表和事实表的连接.使用代理关键字,而不应该使用自然关键字或者智能关键字.
(3) 退化维度:一般都是事务的编号,如订单编号、发票编号等.这类编号需要保存到事实表中,但是不需要对应的维度表.退化维度经常会和其他一些维度一起组合成事实表的主键,在分析中可以用来做分组使用.
3.1.2 分类
(1) 根据维度值变化情况分
①缓慢变化维:与时间等因素无关的,变化相对较慢的维度.
②快速变化维:受时间或输入数据影响,变化相对较快的维度.一般通过增加列来更新数据.
(2) 根据表大小分
①大维度:维度表的字段很多、记录数很大,例如客户表维度表.由于数据量大,导致查询效率很低,需要进行优化.
②迷你维:将大维度中的使用频率较高的字段提取出来,形成一个字段少的迷你维度表,在查询时改为查迷你维度表,能明显提高查询效率.
(3) 按维度层次分
①普通维:基于一个维表的维度,由维表中的不同列来表示维度中的不同级别.
②父子维:基于两个维表列的维度,由维表中的两列来共同定义各个成员的隶属关系,一列称为成员键列来标识每个成员,另一列称为父键列来标识每个成员的父代.
③雪花维:基于多个维表的维度,各个维表间以外键关联,分别存储在同一维度中不同级别的成员列值.
3.1.3 拉链表
拉链表是一种处理维度表数据更新的策略,它通过添加新的列或行来记录维度属性的变化,而不是直接修改原有数据.
(1 ) 实现方法
①维度表和ODS全量表根据代理主键做左关联,在维度表中找出有变化的数据,修改数据状态为'无效',修改对应的结束日期为当前日期;找出不存在于ODS全量表的数据,修改对应的结束日期为当前日期,作为临时表1;
②ODS全量表和维度表根据代理主键做左关联,在ODS全量表全量表中找出找出有变化的数据和存在与维度表的数据,修改开始日期为当前日期,结束日期为'2099-12-31',作为临时表2;
③将临时表1和临时表2 union all 后覆盖写入维度表.
3.2 事实表
3.2.1 概念
(1) 事实:业务流程中的一条业务.
(2) 粒度:数据仓库的数据单位中保存数据的细化或综合程度的级别.
(3) 事实表:每行数据代表一个业务事件,存放用来描述业务的大量数据,也包含了与各维度表相关联的外键.
3.2.2 分类
(1) 根据粒度划分
①事务事实表(原子事实表):描述业务过程,数据的粒度通常是每个事务一条记录,保存的是最原子的数据.
②周期快照事实表:统计一个实体在一段时间周期内的累积事实数据.例如卖家累计快照事实表,包含了历史截至当日的下单金额、历史截当日的支付金额等字段.
③累计快照事实表:描述整个业务生命周期中的关键事件,通常具有多个日期字段来记录关键时间点;当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改.例如订单累计快照事实表,粒度是订单,同时包含订单创建时间、付款时间、发货时间、收货时间等关键时间点字段,便于计算不同业务过程的时间间隔.
(2) 根据用途划分
①原子事实表.
②聚集事实表(汇总事实表):原子事实表上的汇总数据.
③合并事实表:是指将位于不同事实表中处于相同粒度的事实进行组合建模而成的一种事实表,它的维度是两个或多个事实表的相同维度的集合.合并事实表的粒度可以是原子粒度也可以是聚集粒度.
4 维度建模流程
选择业务过程→声明粒度→确定维度→确定事实.
(1) 确定业务需求及业务过程
①与用户沟通需求,明确需要解决的业务问题.
②确定需要建模的业务过程,及需要度量的指标.
(2) 声明粒度:确定事实表的粒度,即每一行数据代表的业务事件的详细程度.
(3) 设计维度表:确定业务过程中的维度,定义维度属性,这些属性将用于描述和过滤数据.
(4) 设计事实表:根据业务过程和粒度,设计事实表,并在事实表中定义需要度量的指标.
(5) 建立数据模型.
5 题目
(1) 星型模型和雪花模型的区别
①概念
两者都是数据仓库的数据组织方式,主要区别是维度表是否进一步规范化.
星型模型:由一个中心的事实表和多个围绕它的维度表组成,维度表直接与事实表连接.优点是结构简单,易于理解和使用,查询速度快.缺点是通常不规范化,数据冗余度高.
雪花模型:由一个中心的事实表和多个维度表组成,但维度表被进一步规范化,分解成多个更小的表.这些表之间通过外键关联.优点是数据冗余度低,更符合数据库规范化原则,减少存储空间.缺点是查询性能可能低于星型模型,因为需要进行多次表连接,设计和维护也相对复杂.
②实际需求举例
需求1:在线零售商店的销售分析,分析每日销售额,按产品类别、地区、时间段进行汇总和细分.
模型选择:星型模型更合适.事实表存储每日销售数据(产品ID,销售数量,销售金额,日期,地区ID,客户ID),维度表分别包含产品信息(产品ID,产品类别,产品名称),地区信息(地区ID,省份,城市),时间信息(日期,月份,季度,年份),客户信息(客户ID,客户名称,客户地址).这种情况下,查询速度是首要考虑因素,即使存在一些数据冗余也问题不大.
需求2:大型电信运营商的客户关系管理,分析客户的通话记录、消费习惯、地理位置等信息,用于精准营销和客户细分.
模型选择:雪花模型更合适.因为电信数据量巨大,客户信息非常复杂(包含地址、联系方式、家庭信息等),可以将客户维度表进一步规范化,分解成多个子表(例如:客户基本信息表、联系方式表、地址表),减少冗余,节省存储空间. 虽然查询速度可能略慢,但数据量大的情况下,节省存储空间更重要.
③总结
选择哪种模型,取决于数据量、查询频率、数据复杂度以及对数据冗余的容忍度.如果数据量不大,查询速度是首要考虑因素,则选择星型模型;如果数据量巨大,数据复杂,需要减少冗余,则选择雪花模型.在实际应用中,很多数据仓库会结合两种模型的优点,采用混合模型.