大话数仓,数据仓库,维度建模方法(二)

大话数仓,数据仓库,维度建模方法(二)

首页冒险解谜维度访问更新时间:2024-07-27

前文已经简单介绍了什么是数据仓库,数据仓库事实表、维表等相关概念。在了解这些概念之后,我们要建设符合企业要求,能支持业务使用、运营分析的数据仓库。然而在对数据建模之前,我们要对整个业务系统有深刻的理解,只有深度理解了公司内的业务,在数仓建设过程中才会抽象出公共维度的事实宽表,减少数据重复建模、提升数据质量。

一、维度建模方法论

数据仓库建模方法论有多种:分别是维度建模、范式建模、Data Vault模型、Anchor模型。而在企业中最流行,最常用的数仓建模方式便是维度建模。

1、维度模型

按数据组织建模类型划分可分为星型模型、雪花模型、星座模型。前文中已经介绍了相关概念,这里不再做过多赘述。

1.1、星型模型

星型模型是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布,即是 星型模型。

图来源于Kimball

1.2、雪花模型

在星型模型的基础上,维度表上又关联了其他维度表,这种叫雪花模型。

雪花模型维护成本高,性能较差,一般很少使用。尤其在基于Hadoop体系构建数据仓库时,尽可能的要减少join的操作。

1.3、星座模型

星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。

2、范式模型

即实体关系(ER)模型,从全企业的高度设计一个3NF模型,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF。

3、Data Vault模型

DataVault由Hub(关键核心业务实体)、Link(关系)、Satellite(实体属性) 三部分组成 ,它是在ER关系模型上的衍生,同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。

4、Anchor模型

高度可扩展的模型,所有的扩展只是添加而不是修改,因此它将模型规范到6NF,基本变成了K-V结构模型,基本很少使用。

二、维度建模流程

下面通过一个业务场景来简单论述维度建模的过程,我们以微商城下单为例:一个会员购买一件商品,会生成一条记录数据。这条记录包含了会员的ID、商品的ID、时间,支付金额,支付方式等等诸多业务信息,我们对这条记录进行拆分。

维度建模的步骤:

2.1、收集业务需求与数据实现

在进行数据建模之前,我们要跟业务方进行充分沟通,理解整个链路的业务,对底层数据要充分认识。通过沟通交流、查看数据库数据或现有报表数据,理解他们需要的关键性指标,运营指标。同时数据实际情况要跟多开发组进行反复核验,确保数据的 原子性(原生业务数据,未进行任何加工处理的数据)。

2.2、选择业务过程

业务过程是业务活动事件,如下单,支付,退款都是业务过程,把这些过程转换为事实表中的事实,多数事实表只记录某一业务过程的结果。业务过程的选择非常重要,因为业务过程定义了特定的设计目标以及对粒度、维度、事实的定义。

2.3、声明粒度

声明粒度是维度设计的重要步骤,粒度用于确定某一事实表中的行表示什么。在选择维度或事实前必须声明粒度,因为每个维度或事实必须与定义的粒度保持一致。在从给定的业务过程获取数据时,原子粒度是最低级别的粒度。

2.4、确认维度

维度是度量的环境,用来反映业务的一类属性。这类属性的集合构成一个维度,也可以称为实体对象。维度属于一个数据域,如地理维度(其中包括国家、地区、省以及城市等级别的内容)、时间维度(其中包括年、季、月、周、日等级别的内容)。

2.5、确认事实

事实 涉及来自业务过程事件的度量,基本上都是以数据值表示。事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量。在设计过程中,可以选择不同类型的事实表,它们有各自的适用场景

2.6、数据建模

选择一种维度模型进行数据建模,使用星型建模对业务数据进行建模。

三、数仓建模规范3.1、数仓层级划分

数据仓库分层

ODS原始数据层

ODS层保存所有操作数据,不对原始数据做任何处理。在业务系统和数据仓库之间形成一个隔离,源系统数据结构的变化不影响其他数据分层。减轻业务系统被反复抽取的压力,由ODS统一进行抽取和分发。记住ODS层数据要保留数据的原始性。

处理原则:

根据源业务系统表的情况以增量或全量方式抽取数据;

ODS层以流水表和快照表为主,按日期对数据进行分区保存,不使用拉链表;

ODS层的数据不做清洗和转换,数据的表结构和数据粒度与原业务系统保持一致。

DWD数据明细层

DWD层的数据是经由ODS层数据经过清洗、转换后的明细数据,满足对标准化数据需求。如对NULL值处理,对数据字典解析,对日期格式转换,字段合并、脏数据处理等。

处理原则:

数据结构与ODS层一致,但可以对表结构进行裁剪和汇总等操作;

对数据做清洗、转换;

DWD层的数据不一定要永久保存,具体保存周期视业务情况而定。

DWS数据汇总层

DWS层数据 按主题对数据进行抽象、归类,提供业务系统细节数据的长期沉淀。这一层是一些汇总后的宽表,是根据DWD层数据按照各种维度或多种维度组合,把需要查询的一些事实字段进行汇总统计。可以满足一些特定查询、数据挖掘应用,面向业务层面,根据需求进行汇总。

处理原则:

面向全局、数据整合;

存放最全的历史数据,业务发生变化时易于扩展,适应复杂的实际业务情况;

尽量减少数据访问时的计算量,优化表的关联。维度建模,星形模型;

事实拉宽,度量预先计算, 基本都是快照表。反规范化,有数据冗余。

ADS数据明细层

ADS应用层 是根据业务需要,由DWD、DWS数据统计而出的结果,可以直接提供查询展现,或导入至Oracle等关系型数据库中使用。这一层的数据会面向特定的业务部门,不同的业务部门使用不同的数据,支持数据挖掘。

处理原则:

形式各式,主要按不同的业务需求来处理;

保持数据量小,定时刷新数据;

数据同步到不同的关系型数据库或hbase等其他数据库中。

提供最终数据,来满足业务人员、数据分析人员的数据需求。

数据仓库分层模式作用

3.1.1、数据结构化更清晰:对于不同层级的数据,他们作用域不相同,每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

3.1.2、数据血缘追踪:提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。

3.1.3、减少重复开发:数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率。

3.1.4、简化复杂的问题:把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。有点类似Spark RDD的容错机制。

3.1.5、减少业务的影响:业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。

3.2、数据域划分和命名

数据域的划分至关重要,在数据建模过程中,往往需要我们根据业务划分数据并约定命名。建议使用业务名称结合数据层次约定相关命名的英文缩写,这样划分层次更清晰,见名即可知意。

3.2.1、数据域划分

按业务划分:

命名时按主要的业务划分,以指导物理模型的划分原则、命名原则及使用。如公司有多条业务线,可以按照不同业务线进行划分。

按数据域划分:

命名时按照数据域进行划分,以便有效地对数据进行管理。例如,交易 数据的英文缩写可定义为“trd”,会员数据的英文缩写可以定义为 mbr。

按业务过程划分:

当一个数据域由多个业务过程组成时,命名时可以按业务流程划分。业务过程是从数据分析角度看客观存在的或者抽象的业务行为动作。例如,交易数据域中的“退款”这个业务过程的英文缩写可约定命名为“rfd_ent”。

3.2.2、任务命名

针对数据域任务命名一定要按照规范执行,这里以作者工作中常使用的命名方式为例,当然每个人习惯不同,命名可能有所不同。

如:ods_jnxx_mbr_intgl_di ods:代表ods层 jnxx:公司名称英文缩写 mbr:会员 的缩写 mbr,表示会员业务 intgl:会员积分 英文的缩写,会员积分相关任务 di:代表天增量。 d:代表日全量同步 ri:代表小时增量同步 m:代表月 等等,这里就不一一举例了。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved