什么是数据仓库?
数据仓库,英文名称date warehouse 简称DW,数据仓库,就是一个很大的用来存储数据的集合,用于解决企业数据分析性和决策目的创建,对多样的数据进行筛选与整合,指导业务流程曾改进,成本,质量以及控制。
数据仓库的输入方就是各种各样的数据源,最终的输出用来为企业做数据分析,数据挖掘和数据报表。
数据仓库特点:
- 主题性 不同于传统数据库对应于某个或多个项目,数据仓库根据使用者实际要求,将不同数据源的数据在一个较高的抽象层次上做一个擂台,所有数据都围绕某一个主题来组织。
- 集成性 数据仓库中存储的数据是来源于多个数据源的集合,原始数据来自不同的数据源,要整合为最终的数据集合,需要把数据源经过抽取>清洗>转换的过程。(其实这就是ETL)
- 稳定性 数据仓库中保存的数据是一系列历史快照,不允许被修改。用户只能通过分析工具进行查询和分析
- 时变性 数据仓库会定期接受新的集成数据,反应出最新的数据变化。(这个是稳定性并不矛盾)
数据源多种多样,那么数据仓库要做数据集成,所依赖的就是(ETL)
什么是ETL?
ETL的英文字母是EXTRACT-TRANSFORM-LOAD的缩写。
Extract :数据抽取,也就是把数据从数据源读取出来
Transform:数据转换,把原始数据转换成期望的格式与维度。如果用在数据仓库的场景下,transform 也包括数据清洗,清洗掉噪音数据。
Load:数据加载,把处理后的数据加载到目标处,比如数据仓库。
市面上常用的数据仓库有哪些?
Hive是基于Hadoop的数据仓库工具,可以对存储在HDFS上的文件数据集进行查询和分析处理。Hive同时也提供了类似与SQL语言的查询语言hiveql,在做查询时将hql语句转换成mapreduce任务进行执行。
ETL日志,警告发送
- ETL日志
ETL日志分为三类
一类是执行过程日志,这一部分日志是在ETL执行过程中每执行一步的记录,记录每次运行每一个步骤的起始时间,影响了多少行数据,流水账形式。
一类是错误日志,当某个模块出错的时候写错误日志,记录每次出错的时间,出错的模块以及出错的信息等。
第三类日志是总体日志,只是记录ETL开始时间,结束时间是否成功信息。如果使用ETL工具,ETL工具会自动产生一些日志,这一类日志也可以作为ETL日志的一部分。 - 警告发送
如果ETL出错了,不仅要形成ETL出错日志,而且要向系统管理员发送警告。发送警告的方式多种,一般常用的就是给系统管理员发送邮件,并敷上出错的信息,方便管理员排查错误。
ETL开发
概述:ETL是数据仓库的后台,主要包括抽取,清洗,规范化,提交四个步骤,传统数据仓库一般分为四层模型。 作用:划分ETL阶段工作重心,便于管理
STG:与源系统模型一致 增量/全量抽取 不做数据转换 添加审计列。 作用:降低开发和维护成本
ODS: 与源系统模型一致 全量数据 标识逻辑删除 标识逻辑删除 标识增量时间戳 添加审计列 作用:减少需求变化带来的冲突
DW : 维度模型 增量抽取 数据清洗、规范化 添加审计列 作用:便于数据问题跟踪
STG层
在维度建模阶段已经确定了源系统,而且对源系统进行了数据评估。Stg层是根据cdc策略把各个源系统的数据抽取到数据仓库中,stg层主要是面向批处理的形式,如果是根据日志信息实时同步,可以跳过stg层直接进入ods层。
Stg的作用
1.减轻源系统的压力
2.数据备份,支持重跑
3.便于数据问题跟踪
4.数据质量检查
开发步骤
- 确定CDC策略,根据源系统的数据状况选择一个合适的CDC策略
- 设计mapping文档
- 设计物理模型,stg的物理模型一般包括源系统的所有字段和审计字段,例如:原系统名称,源表名称,加载时间,加载方式。可以去掉其他约束条件,比如主键,索引,默认值。如果源表和目标表的数据库类型不同,最好字段长度要进行扩充,一般目标表的数据类型就选择几种常用,长度就选择几个固定的长度
- 抽取数据,stg层面向异构数据源,最好选择用ETL工具,一般ETL工具都支持多种数据源,stg层不做数据转换。
- 加载数据,stg层一般保留7天或一月的数据
ODS层
ODS层是把stg层数据进行历史存档,保留源系统的所有历史数据,如果是流式的,可以跳过stg层,试试同步到ods层
ODS的作用
- 全量存储源系统的数据
- 支持下游系统实时查询服务
- 数据质量检查
开发步骤
- 设计mapping文档
- 设计物理模型,ods的物理模型一般包括源系统的所有字段和审计字段,但是和源系统最主要的区别是ods层加