数仓分层
一些定义
ETL
将数据从来源经过抽取、转换、加载的过程
宽表
将业务主体相关的指标、维度、属性等关联到一起的表,存在一定的数据冗余
好处:查询性能得到提高
坏处:不满足三范式,数据存在大量冗余
宽表的设计广泛应用于数据挖掘前的数据准备,相关字段信息都放到一张表中,大大提高了迭代计算的能力
主题
在较高层次上对数据进行综合、归类的一个抽象概念,每一个主题对应一个宏观的分析领域。
数仓DW
Data warehouse数据仓库,是在数据库大量存在的情况下,一整套包括etl、调度、建模在内的完整理论体系。
建设目的:支持复杂的分析操作,侧重决策支持,提供直观的查询结果。
数据仓库不是数据的目的地,而是为数据的目的地做准备,包含:清洗,转义,分类,重组,统计,拆分等
主要特点
面向主题
- 操作型数据库面向事务处理任务,数据仓库中的数据按照一定的主题域进行组织
- 主题指的是用户在使用数据仓库进行决策时所关心的重点,一个主题通常与多个操作型信息相关
集成
- 需要对源数据进行统计加工融合
- 在加工的过程中,必须消除数据的不一致,保证数据仓库中存放的是整个企业一致的全局信息
不可修改
- 数据仓库主要是为决策分析提供数据,涉及的操作主要是数据的查询
与时间相关
数据仓库中的数据都需要标明时间属性
分层的好处
- 让数据结构更加清晰:每个数据层都有自己的作用,更方便使用和维护
- 简化复杂问题:一个复杂的问题拆解成多个步骤,每个层只需解决特定的问题
- 统一输出口径:通过分层,提供统一的数据出口
- 减少重复开发:开发通用的中间层,极大地减少了重复计算的工作
数据分层
数据运营层ODS
数据准备区,也称贴源层。数据源中的数据经过ETL之后进入本层。
主要功能
- 是后面DW层的准备区、
- 为DWD层提供原始数据
- 减少对业务系统的影响
考虑后续的追溯数据的问题,该层不必对数据进行过多的清洗,直接接入原始数据也可以,后续工作交给具体分层去做
数据来源
业务库
- 使用sqoop抽取
- 实时:用canal监听mysql的binlog
埋点日志
- 日志一般以文件的形式保存,用flume定时同步
- 用spark streaming或Flink实时接入
- kafka
消息队列
来自kafka、ActiveMQ等
DW层
数据明细层DWD
该层是业务层和数据仓库的隔离层,保持和ODS层一样的粒度,主要是对ODS层做数据清洗和规范化的操作
源数据在装入这一层时,要进行去噪(比如,一个人的年龄是200岁,这算异常数据)、去重(同一ID有多条重复数据)、字段命名规范等。
为了提高数据明细层的易用性,通常会采用一些维度退化的方法,将维度退化到事实表,减少维度表和实时表的关联
数据中间层DWM
在DWD层的数据基础上,对数据进行一些轻微的聚合操作,生成一些中间表,提升复用性,减少重复开发。
总之,对核心维度进行聚合,算出相应的统计指标
数据服务层DWS
基于DWM上的基础数据,整合汇总成分析某一特定领域的数据服务层,一般是宽表,用于后续的OLAP等。
该层的数据会相对较少,一张表会覆盖比较多的业务内容
数据应用层 ADS
提供给数据产品和数据分析使用的数据。存放在Redis、ES、PostgreSql等系统供线上系统使用,存放在hive、Druid中供数据分析和数据挖掘使用
事实表
事实表指存储事实记录的表,比如商品订单表
维表层DIM
与事实表相对应的一种表,保存了维度的属性值,和事实表做关联,相当于将事实表重复出现的属性进行抽取,用一张表进行管理
临时表TMP
每一层的计算会有很多临时表,有一个DWTMP层存储临时表
数据集市
也叫数据市场。为了满足特定部门或用户需求。
数据从企业范围的数据库、数据仓库抽取。
和数据仓库的区别
- 数据集市是数据仓库的一个子集,面向部门级业务,而且只面向特定主题。数据集市存储为特定用户预先计算好的数据,满足用户对性能的需求
- 数据仓库是面向主题的、集成的数据的集合,数据集市通常被定义成星型结构或雪花模型