数据仓库
数据仓库并 不是数据的最终目的地,而是为数据最终的目的地做好准备,这些准备包含:
- 清洗
- 转义
- 分类
- 重组
- 合并
- 拆分
- 统计
等等
为什么要分层?
在实际的工作中,我们希望自己的数据能够有顺序地流转,设计者和使用者能够清晰地知道数据的整个声明周期,如下图:
但是,实际情况下,我们所面临的数据状况很有可能是复杂性高、且层级混乱的,我们可能会做出一套表依赖结构混乱,且出现循环依赖的数据体系,如下图:
为了解决我们可能面临的问题,需要一套行之有效的数据组织、管理和处理方法,来让我们的数据体系更加有序,这就是数据分层。数据分层的好处:
- 清晰数据结构:让每个数据层都有自己的作用和职责,在使用和维护的时候能够更方便和理解
- 复杂问题简化:将一个复杂的任务拆解成多个步骤来分步骤完成,每个层只解决特定的问题
- 减少重复开发:规范数据分层,开发通用的中间层,可以极大地减少重复计算的工作
- 便于处理业务的变化:随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知.
- 空间换时间:通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。
分层好处
清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
复杂问题简单化:将复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。当数据出现问题之后,不用修复所有的数据,只需要从有问题的步骤开始修复。
屏蔽原始数据的异常:不必改一次业务就需要重新接入数据。
数据分层
每个公司的业务都可以根据自己的业务需求分层不同的层次;目前比较流行的数据分层:
- 数据运营层 ODS
- 数据仓库层 DW
- 数据应用层 ADS
操作流程:
ODS 层
全称:Operation Data Store ,翻译较多:数据运营层、运营数据存储、操作性数据
最接近 数据源 的层,是作为 数据库到数据仓库的过渡,ODS的数据结构一般与数据来源保持一致,便于减少ETL的工作复杂性
数据源的数据,经过 抽取、清洗、传输,也就是 ETL 过程之后进入本层。
主要: 为了考虑后续可能需要追溯数据问题,因此对于这一层就 不建议做过多的数据清洗工作,原封不动地接入原始数据即可
该层的主要功能:
- ODS是后面数据仓库层的准备区,是后续数据仓库加工数据的来源。
- 为DWD层提供原始数据
- 减少对业务系统的影响
数据来源的方式:
- 业务库:sqoop定时抽取数据;实时方面考虑使用canal监听mysql的binlog日志,实时接入即可
- 埋点日志:日志一般是以文件的形式保存,可以选择使用flume来定时同步;可以使用spark streaming或者Flink、Kafka来实时接入
- 消息队列:来自ActiveMQ、Kafka的数据等
DW 数据仓库层
DW 数据仓库层,从上到下,又可以分为3个层:
- 数据细节层DWD
- 数据中间层DWM
- 数据服务层DWS
数据细节层 DWD
data warehouse details,数据细节层、数据明细层
该层是业务层和数据仓库的隔离层,保持和ODS层一样的数据颗粒度
主要功能:主要是对ODS数据层做一些数据的清洗和规范化的操作,比如去除空数据、脏数据、离群值、重复数据、异常值等。
为了提高数据明细层的易用性,该层通常会采用一些维度退化方法,将维度退化至事实表中,减少事实表和维表的关联。
做这一步时可以先确定我们的业务主题,根据主题搭建这一层的表。
数据中间层 DWM
数据中间层:Data Warehouse Middle,DWM;
该层是在DWD层的数据基础上,对数据做一些 轻微的聚合 操作,生成一些列的 中间结果表,提升公共指标的复用性,减少重复加工的工作。
简单来说,对通用的核心维度进行聚合操作,算出相应的统计指标
数据服务层 DWS
数据服务层:Data Warehouse Service,DWS;
该层是基于DWM上的基础数据,整合汇总成分析某一个主题域的数据服务层,一般是宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
一般来说,该层的数据表会相对较少;一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。
DWD、DWM、DWS 总结
在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。
数据应用层 ADS(APP、DWA)
数据应用层,有以下称呼:
- Application Data Service,ADS
- Data WareHouse Application,DWA
- Application,APP
该层主要是提供给数据产品和数据分析使用的数据,一般会存放在 MySQL、Redis等系统中供线上系统使用;也可能存放在hive中,供数据分析和数据挖掘使用
如:常用的数据报表就是存在该层,通常以饼状图、柱状图、折线图的形式展示给用户,更加直观
感谢:
https://blog.csdn.net/universsky2015/article/details/119965866
https://www.cnblogs.com/itboys/p/10592871.html
https://cloud.tencent.com/developer/article/1744537
https://blog.csdn.net/hello_java_lcl/article/details/107025192



