写点什么

数据仓库为什么要分层

发布于: 2021 年 04 月 18 日
数据仓库为什么要分层

为什么要分层

分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:


清晰数据结构:


每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。


数据血缘追踪:


简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。


减少重复开发:


规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。


把复杂问题简单化:


将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。


屏蔽原始数据的异常:


屏蔽业务的影响,不必改一次业务就需要重新接入数据

数仓分层思想

数据分层每个企业根据自己的业务需求可以分成不同的层次,但是最基础的分层思想,理论上数据分为三个层,数据运营层(ods)、数据仓库层(dw)和数据服务层(da-->ads)。基于这个基础分层之上添加新的层次,来满足不同的业务需求。


数据运营层(ODS)


Operate data store,操作数据存储,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。


例如:MySQL 里面的一张表可以通过 sqoop 之间抽取到 ODS 层


ODS 层数据的来源方式:


  • 业务库

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

  • 埋点日志

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

  • 消息队列

  • 来自 ActiveMQ、Kafka 的数据等


数据仓库层(DW):


Data warehouse,数据仓库层。在这里,从 ODS 层中获得的数据按照主题建立各种数据模型。例如以研究人的旅游消费为主题的数据集中,便可以结合航空公司的登机出行信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。在这里,我们需要了解四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)。


应用层(ADS):


该层主要是提供数据产品和数据分析使用的数据,一般会存放在 ES、MySQL 等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。


例如:我们经常说的报表数据,或者说那种大宽表,一般就放在这里。


发布于: 2021 年 04 月 18 日阅读数: 51
用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
数据仓库为什么要分层