数据仓库
Data Warehouse
数据仓库的基本概念
概念
英文名为Data Warehouse, 简写为DW或DWH. 出现的目的是构建面向分析的集成化数据环境, 为企业提供决策支持(Decision Support). 因为分析性报告和决策支持目的而出现的技术.
之所以叫做"仓库“而不是”工厂“就是因为DW本身是不生产或消费任何数据, 数据来源于外部, 并且开放给外部应用.
基本特征
DW是面向主题的, 集成的, 非易失的和时变的数据集合, 用以支持决策.
-
面向主题(Subject Oriented)
在传统数据库中, 最大的特点就是面向应用进行数据的组织, 各个系统可能是相互分离的, 而数据仓库则是面向主题的.
- 抽象上来说, 主题就是在较高层次上讲企业信息系统中数据进行综合、归类分析利用. 每一个主题基本对应一个宏观分析领域.
- 逻辑上来说, 主题是对应企业中某一个宏观分析领域所涉及的分析对象.
-
集成的(Integrate)
通过对分散、独立、异构的数据库数据进行抽取、清理、转换和汇总便得到了数据仓库的数据, 这样能保证整个企业的数据的一致性, 避免了产生了信息孤岛.
数据仓库中的综合数据不能从原有的数据库系统直接得到. 所以在数据进入到DW之前, 必然要经过统一与综合(抽取和清洗), 这就是DW建设中, 最关键、最复杂的一步.
-
非易失性(Non-Volatile)
非易失性也可称为稳定性或不可更新性. 数据仓库的数据反映的是相当一段时间内的历史数据的内容, 是不同时点的数据库的快照的集合, 以及基于这些快照进行统计、综合和重组的导出数据. 基于这个特点, DW一般有大量的查询操作, 但修改和删除操作很少. 通常只需要定期的加载和更新.
-
时变(Time Variant)
数据仓库包含各种粒度的历史数据. 虽然说DW的用户不能修改数据, 但并不是说数据仓库的数据就是永远不变的. 分析的结果只能反映过去的情况, 当业务变化后, 挖掘出的模式会失去时效性. 所以说, DW中的数据需要更新, 以适应决策的需要.
- DW的数据时限一般要远远长于操作型数据的数据时限.
- 操作型系统存储的是当前的数据, 而数据仓库中的数据是历史数据.
- 数据仓库中的数据是按照时间顺序追加的, 它们都带有时间属性.
数据仓库与数据库的区别
这两者的区别其实就是
OLAP
与OLTP
的区别.
-
联机事务处理OLTP (On-Line Transaction Processing), 也可以叫做面向交易的处理系统. 是针对具体业务在数据库联机的日常操作, 通常对少数记录进行查询、修改. 用户较为关心的是响应时间、数据的安全性、完整性和并发支持的用户数等问题. 例如MySQL, Oracle等关系型数据库一般属于OLTP
-
联机分析处理OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析, 支持管理决策.
通过这两个的对比就能发现, 数据仓库的出现并不是为了替代数据库的.
数据库设计是尽量避免冗余, 一般是针对某一业务进行设计的. 而数据仓库在设计时有意引入冗余, 依照分析需求、分析维度、分析指标进行设计.
总的来说数据库是为了捕获数据而设计, 数据存库是为了分析数据而设计.
数据仓库分层架构
按照数据流入流出的过程, DW架构可分为: 数据运营层、数据仓库层、数据服务层.
数据运营层 (ODS)
Operation Data Store 数据准备区, 也叫做贴源层, 源数据. 数据仓库源头系统的数据表通常会原封不动的存储一份, 是后续数据仓库加工数据的来源.
来源方式:
- 业务库
- 经常会使用SQOOP来进行抽取, 🌰: 每天定时抽取一次
- 实时方面, 可以考虑用canal/FlinkCDC监听MySQL的binlog
- 埋点日志
- 日志一般是以文件的形式保存, 可以用flume定时同步
- 可以用spark streaming或Flink实时接入
- kafka也可以
- 消息队列
- 来自ActiveMQ、Kafka的数据.
数据仓库层 (DW)
DW数据分层, 由下到上为DWD, DWB, DWS.
- DWD:data warehouse details 细节数据层, 是业务层与数据仓库的隔离层. 主要对ODS数据层做一些数据清洗(去除空值、脏数据、超过极限范围的)和规范化的操作.
- DWB: data warehouse base 数据基础层, 存储的是客观数据, 一般用作中间层, 可以认为是大量指标的数据层.
- DWS: data warehouse service 数据服务层, 基于DWB上的基础数据, 整合汇总成分析某一个主题域的服务数据层, 一般是宽表(字段多的表). 用于提供后续的业务查询, OLAP, 数据分发等.
- 用户行为, 轻度聚合
- 主要对ODS/DWD层数据做一些轻度的汇总
数据服务层/应用层 (ADS)
application data service 应用数据服务, 该层主要是提供数据产品和数据分析使用的数据, 一般会存储在ES、mysql等系统中供线上系统使用
- 一般会将大宽表, 比如报表数据放在这里
ETL
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL, 换句话说就是描述数据从源端经过**抽取(Extra)、转换(Transfer)、加载(Load)**到目的端的过程. ETL就是数据仓库的流水线, 而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定.
数据仓库分层的目的
- 用空间换时间: 通过大量的预处理来提升应用系统的用户体验(效率), 因此数据仓库会存在大量冗余的数据. 如果不分层的话, 如果源业务系统的业务规则发生变化将会影响整个数据清洗过程, 工作量巨大.
- 简化数据清洗的过程: 把原来一步的工作分成多个步骤来完成. 每一层的处理逻辑都相对简单和容易理解了, 这样比较容易保证每个步骤的正确性.
数据仓库元数据的管理
元数据(Meta data), 一句话就能总结: 关于数据的数据.
数据仓库中的元数据**主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态. 并且是整个数据仓库系统运行的基础, 元数据把数据仓库系统中各个松散的组件联系起来, 组成一个有机的整体. **