一文讲透数据仓库为什么需要分层,如何做好数仓分层?

文 | 商业智能BI相关文章 阅读次数:3,223 次浏览
2023-11-15 11:42:21

一、为什么要做数仓分层

“为什么要设计数仓分层?”——这问题应该是做数据仓库搭建的同学在设计分层时首先会形成的疑惑。作为一名数据的规划者,我们肯定希望日后所用的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者所感知。

而做好数仓分层的意义在于:

  1. 清晰数据结构:每一个数据分层都有它的作用域,使得用户在使用表的时候能更方便地定位和理解;
  2. 方便数据血缘追踪:简单来说,最终给业务呈现的是一个能直接使用的业务表,但是它的数据来源有很多,如果有一张来源表出问题了,分层后的数仓能够快速准确地定位到问题,并清楚它的危害范围。
  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够极大程度上减少数据的重复计算。分层的设计也使得某一层的问题能在该层得到解决,无须更改下一层的代码和逻辑。
  4. 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,数仓的每一层只处理单一的步骤,这样更简单明了,而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
  5. 屏蔽原始数据的异常:源头系统可能极为繁杂,而且表命名、字段命名 、字段含义等可能五花八门,通过 DW 层来规范和屏蔽所有这些复杂性,保证下游数据用户使用数据的便捷和规范。如果源头系统业务发生变更,相关的变更由 DW 层来处理,对下游用户透明,无须改动下游用户的代码和逻辑。

数仓分层前后对比如下:

数仓分层前后对比

二、如何进行数仓分层?

1. 数仓分层详解

数据分层每个企业根据自己的业务需求可以分成不同的层次,但是最基础的分层思想,理论上数据分为三个层,数据引入层(ODS)、数据仓库层(DW)和数据服务层(ADS)。基于这个基础分层之上添加新的层次,来满足不同的业务需求。

1)ODS层

数据引入层(ODS,Operational Data Store,又称数据基础层),是最接近数据源中数据的一层,这将原始数据几乎无处理地存放在数据仓库系统中,结构上与源系统基本保持一致。这一层的主要职责是解决数据孤岛问题,保证数据集成完整性;数据与源系统表一致,体现非易失性;定期同步,增加表同步时间戳,体现时变性。

ODS层数据的来源方式:

业务库:经常会使用sqoop来抽取,比如我们每天定时抽取一次。在实时方面, 可以考虑用canal监听mysql的binlog,实时接入即可。

埋点日志:线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者Flink来实时接入,当然,kafka也会是一个关键的角色。

消息队列:来自ActiveMQ、Kafka的数据等。

一般来说 ODS 层的数据和源系统的数据是同构的,其内的表通常包括两类,一个用于存储当前需要加载的数据,一个用于存储处理完后的历史数据。历史数据一般保存 3-6 个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存。

2)DW层

数仓层(DW, data warehouse)是我们在做数据仓库时要核心设计的一层,本层将从 ODS 层中获得的数据按照主题建立各种数据模型,每一个主题对应一个宏观的分析领域,数据仓库层排除对决策无用的数据,提供特定主题的简明视图。在DW层会保存BI系统中所有的历史数据,例如保存10年的数据。

DW存放明细事实数据、维表数据及公共指标汇总数据。其中,明细事实数据、维表数据一般根据ODS层数据加工生成。公共指标汇总数据一般根据维表数据和明细事实数据加工生成。

DW层又可以细分为维度层(DIM)、明细数据层(DWD)和汇总数据层(DWS),采用维度模型方法作为理论基础, 可以定义维度模型主键与事实模型中外键关系,减少数据冗余,也提高明细数据表的易用性。在汇总数据层同样可以关联复用统计粒度中的维度,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。

  • 维度层(DIM,Dimension):以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性、关联维度等定义计算逻辑,完成属性定义的过程并建立一致的数据分析维表。为了避免在维度模型中冗余关联维度的属性,基于雪花模型构建维度表。
  • 明细数据层(DWD,Data Warehouse Detail):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细事实表。可将某些重要属性字段做适当冗余,也即宽表化处理。
  • 汇总数据层(DWS,Data Warehouse Summary):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标表。以宽表化手段物理化模型,构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。

3)ADS层

数据应用层(ADS,Application Data Store)存放着数据产品个性化的统计指标数据,报表数据。主要是提供给数据产品和数据分析使用的数据,通常根据业务需求,划分成流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。

2. 帆软数据仓库技术架构全景图

数仓构建的核心工作是分层及建模,分层架构设计是为应用数据资源采集、存储、处理和交换提供建设性依据,而数据模型将决定数据仓库系统的增长性和性能。

数仓技术架构全景图

三、数仓分层的总结与思考

本文的核心在于探讨为什么需要对数据仓库进行分层,并讲解了数据分层的思想和方法。对数仓进行高效分层,便于企业在管理数据的时候,能对数据有一个更加清晰的掌控。

帆软为数仓建设提供生产力工具,若想了解更多数据仓库建设解决方案,请点击:《帆软数据仓库和商业智能解决方案》,另可获取各行业全业务场景数仓搭建案例及资料。

相关内容

立即咨询 立即咨询

在线客服

电话咨询

技术问题

投诉入口

返回顶部