数据仓库的一些概念
前言
由于工作原因,接触到了数据仓库,在平时工作交流的时候可能涉及到一些概念需要补课。因此这里准备补补课。
啥是数据仓库
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
数据仓库我个人理解(划重点哈,我个人理解。我不是做数仓的,就目前的理解应该是一个片面的)。
是一套数据存储和应用的体系,提供了数据集成、加工、处理等功能,并且数据量是很大的一套数据存储处理体系。
数据仓库有以下特征:
- 数据仓库是面向主题的;操作型数据库的数据组织面向事务处理任务,而数据仓库中的数据是按照一定的主题域进行组织。主题是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。
- 数据仓库是集成的,数据仓库的数据有来自于分散的操作型数据,将所需数据从原来的数据中抽取出来,进行加工与集成,统一与综合之后才能进入数据仓库;
- 数据仓库是不可更新的,数据仓库主要是为决策分析提供数据,所涉及的操作主要是数据的查询;
- 数据仓库是随时间而变化的,传统的关系数据库系统比较适合处理格式化的数据,能够较好的满足商业商务处理的需求。稳定的数据以只读格式保存,且不随时间改变。
- 汇总的。操作性数据映射成决策可用的格式。
- 大容量。时间序列数据集合通常都非常大。
- 非规范化的。Dw数据可以是而且经常是冗余的。
- 元数据。将描述数据的数据保存起来。
- 数据源。数据来自内部的和外部的非集成操作系统。
数据仓库往往有以下特性
- 效率高:数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,日为周期的数据要求的效率最高,要求24小时甚至12小时内
- 数据质量:数据仓库所提供的各种信息,肯定要准确的数据,但由于数据仓库流程通常分为多个步骤,包括数据清洗,装载,查询,展现等等,复杂的架构会更多层次
- 扩展性:之所以有的大型数据仓库系统架构设计复杂,是因为考虑到了未来3-5年的扩展性,这样的话,未来不用太快花钱去重建数据仓库系统,就能很稳定运行。主要体现在数据建模的合理性,数据仓库方案中多出一些中间层,使海量数据流有足够的缓冲,不至于数据量大很多,就运行不起来了。
数据仓库的分层
为什么要分层?分层有什么好处?
我举一个例子其实就可以理解了。
现在假设我们生产上出现了一批数据异常,需要进行修复。但是涉及业务范围很广且数据量比较大,表之间的关联复杂。
我们一般在处理的时候要明确的简单思路就是:
- 定位错误数据
因为逻辑复杂且表关系复杂,往往会根据某一张或几张表的数据为基准进行错误数据的筛选并且要进行逻辑验证。对于复杂问题往往会创建临时表来将错误数据临时存储。 - 处理错误数据
在修复数据的时候往往也是要根据错误临时表数据进行汇总分析进行处理,有的时候也会建立一个正确数据临时表,然后进行验证数据是否准确,如果没问题在根据这个正确临时表数据修正数据
前面我们了解到数据仓库的数据数据量很大,且数据来源多样化。数据结构也存在多种情况,同一个含义的字段,在不同的来源中字段名称可能不一样,所以数据仓库的原始数据有可能是杂乱无章的。但是这些都是真实的原始数据,数据仓库的特性就是不进行修改只提供查询。因此这里就需要对数进行加工处理,处理后的数据放入临时表。因此也就需要数据分层。
这样做的好处自然就是我们可以按照主题需要将数据进行清洗,放入不同的下一次数仓这样对于主题而言只需要处理对对应层级数据进行分析即可。另外也可以减少我们直接从原始层中获取数据的难度降低开发难度提高效率。
数仓的分层思想
数据分层每个企业根据自己的业务需求可以分成不同的层次,但是最基础的分层思想,理论上数据分为三个层,数据运营层
、数据仓库层
和数据服务层
。基于这个基础分层之上添加新的层次,来满足不同的业务需求。
数据运营层(ODS)
这一层也叫做数据准备层(operational data store
操作存储数据层)原汁原味的数据集。这一层更多的是将数据从数据源拉取过来。这一层也是最接近源数据的一层。
ODS层数据的来源方式
- 业务库:经常会使用sqoop来抽取,比如我们每天定时抽取一次。在实时方面, 可以考虑用canal监听mysql的binlog,实时接入即可。
- 埋点日志:线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者Flink来实时接入,当然,kafka也会是一个关键的角色。
- 消息队列:来自ActiveMQ、RabbitMQ、Kafka的数据等
数据仓库层(DW Data warehouse)
从ODS层中获得的数据按照主题建立各种数据模型,这里面有四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)
这一层往往也是分为3个层次
- DWD(Data Warehouse Detail)数据明细层
数据模型往往和
ODS
层一致。不做清晰转换处理、为支持数据重跑可额外增加数据业务日期字段、可按年月日进行分表、用增量ODS层数据和前一天DWD相关表进行merge处理。这一层的数据往往是经过处理之后得了的数据(地主家也没余粮,不符合要求的数据地址也没地方放)例如:去重、去噪、提脏等操作
- DWM(Data WareHouse Middle)数据中间层
对
DWD
层的生产数据进行轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV日志生成的会话数据)。
- DWS(Data WareHouse Servce)数据服务层
也成为数据集市DM(data market)或宽表。是根据
DWB
层数据按各个维度ID进行粗粒度汇总聚合
数据服务层/应用层(ADS)
Application Data Service
(应用数据服务)也成为ST
.这一层是提供为数据产品使用的结果数据,面向用户应用和分析需求例如:前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析。一般会存放在ES、MySQL等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。
示意图
Tip:
dws
和dwd
是并行而不是先后顺序。dws 会做汇总,dwd 和 ods 的粒度相同
参考博客:
https://zhuanlan.zhihu.com/p/341591615