文章学习笔记内容来源:拉勾教育大数据开发高薪训练营。
记录一下数据仓库学习笔记,第一次接触数据仓库,重点不在于数据仓库项目实现,而是要理解明白怎么一步步构建数据仓库从需求分析、数据采集、建立表、数据分层、数据一层层转换得到最终所需要的数据。
什么是数据仓库
数据仓库是一个面向主题的、集成的、相对稳定的、反应历史变化的数据集合,用于支持管理决策
数据仓库四大特征
1、主题
- 逻辑意义上,他是对应企业中某一宏观分析领域所涉及的分析对象。如销售情况分析就是一个分析领域,那么数据仓库的分析主题可以是“销售分析”。
2、集成的
- 数据仓库中的数据是为分析服务的。分析需要多种广泛的不同数据源比便进行比较、鉴别,数据仓库中的数据会从多个数据源中获取,这些数据源保护多种类型的数据库、文件系统以及网络数据等,他们通过数据集成而形成数据仓库中的数据。
3、稳定的
- 数据仓库数据是反映一段相当长的时间内历史数据的内容,是不同时刻的数据库的快照的集合,以及基于这些快照进行统计、综合和重组的导出数据。数据经过加工和集成进入数据仓库是极少更新的,通常只需要定期的加载和更新。
4、 反映历史变化的
- 数据仓库的数据随时间变化表现在下面几个方面
- 数据仓库的数据时限一般要远远长于操作类型数据的数据时限
- 业务系统存储的是当前数据,而数据仓库中的数据是历史数据
- 数据仓库中的数据是按照时间顺序追加的,都带有时间属性
数据仓库作用
- 整合企业业务数据,建立统一的数据中心
- 产生业务报表,了解企业的经营状况
- 为企业运营、决策提供数据支撑
- 可以作为各个业务的数据源,形成业务数据互相反馈的良性循环
- 分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果
- 开发数据产品,直接或者间接地为企业盈利
数据仓库与数据库的区别
对比内容 | 数据库 | 数据仓库 |
---|---|---|
数据内容 | 近期值、当前值 | 历史的、归档的数据 |
数据目标 | 面向业务操作 | 面向管理决策、面向分析(主题) |
数据特性 | 动态频繁更新 | 静态、不能直接更新,定时添加数据 |
数据特性 | 动态频繁更新 | 静态、不能直接更新,定时添加数据 |
数据结构 | 高度结构化、满足第三范式 | 简单的、冗余的、满足分析的 |
使用频率 | 高 | 低 |
数据访问量 | 访问量大;每次访问的数据量少 | 访问量小;每次访问的数据量大 |
响应时间要求 | 高 | 低 |
数据集市
- 数据集市:是按照主题域组织的数据集合,用于支持部门级的数据分析与决策。如在商品销售的数据仓库中可以建立多个不同主题的数据集市:采购数据集市、库存数据集市、销售数据集市。
- 当各个数据集、各种定义、各自存储、各个数据集市和企业内部的其他数据进行连接互动,就行形成了数据孤岛情况。
- 数据孤岛:就是数据间缺乏关联性,彼此无法兼容。
数据模型
- 数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。有了适合业务和基础数据存储环境的模型,能获得以下好处:
- 性能:良好的数据模型能帮助我们快速查询所需要的数据,减少数据的I/O吞吐
成本:良好的数据模型能极大地减少不必要的数据冗余,也能实现计算结果复用,极大地降低大数据系统中的存储和计算成本- 效率:良好的数据模型能极大地改善用户使用数据的体验,提高使用数据的效率
- 质量:良好的数据模型能改善数据统计口径的不一致性,减少数据计算错误的可能性
- 常见的建模方法有 ER模型、维度模型
数据仓库分层
- 数据仓库是一整套包括了数据建模、ETL(数据抽取、转换、加载)、作用调度等在内的完整的理论体系流程。数据仓库在构建过程中通常都需要进行分层处理。业务不同,分层的技术处理手段也不同。
- 数据仓库常见分层一般为三层,分别为:数据操作层、仓库层和应用数据层。
数据仓库模型
事实表
事实表:保存度量值的详细值或事实的表称为事实表。
事实表分类:
- 1、事务事实表 如:订单表
- 2、周期快照事实表 如 :商家日销售表
- 3、累积快照事实表 如:商家本周、本月、本年累计销售表
事实表是关注的内容: 如销售额、销售量
维度表
- 维度表就是你观察该事务的角度,是从哪个角度去观察这个内容的
- 维度表是按照分析数据的角度,包含事实数据表中事实记录特性,方便为分析者提供有用的信息。如提供描述信息、如何汇总事实数据表数据。
- 维度表:是观察事务的角度
模型
- 星型模型由一个事实表和一组维度表组成。事实表有大量数据,没有数据冗余。维度表有一定的数据冗余。
- 星型模型存在数据冗余,所以在查询统计时只需要做少量的表连接,查询效率高。
- 雪花模型是星型模型的变种,去除了数据的冗余,查询时连接的表要多些。
- 事实星座有多个事实表,维度表是公共表,进行维度表公用,而雪花模型的维度表不进行公用
元数据
元数据是关于数据的数据。源数据打通了源数据、数据仓库、数据应用,记录了数据从生产到消费的全过程。通过元数据可以知道数据仓库中 有什么数据、数据分布情况、数据类型、数据之间关系、哪些数据被经常使用、哪些不被经常使用
通常元数据有以下分类
- 技术元数据:库表结构、数据模型、ETL程序、SQL等
- 业务元数据:业务指标、业务代码、业务术语等
- 管理元数据:数据所有者、数据质量、叔叔安全等
常见的元数据信息包括
- 表结构信息
- 数据的空间存储、读写记录、权限归属和其它各类统计信息
- 数据的血缘关系
- 数据的业务属性信息
数据血缘关系
- 数据血缘关系: 就是数据之间的上下游来源去向关系,数据从哪里来到哪里去。如果某个数据有问题,可以根据数据的血缘关系进行上下游排查,定位出错环节。此外可以通过血缘关系,建立生产数据的任务之间的依赖关系,进而辅助调度系统的工作调度,或者用来判断一个失败或错误的任务可能对哪些下游数据造成影响等。
- 以Hive表为例,通过分析Hive脚本的执行计划,可以定位出字段级别的数据血缘关系,数据从哪里来,怎么计算的。如果是一个MapReduce任务生成的数据,从外部来看,可能只能通过分析MR任务输出的Log日志来进行粗略判断目录级别的读写关系,从而间接推导数据的血缘依赖关系。
数据的业务属性信息
- 业务属性信息: 以一张数据表的统计口径信息为例。这张表是做什么用,各个字段的含义是什么,业务信息,业务表述,字段的数据是怎么计算而来的,业务表标签,操作这张表的脚本逻辑的历史变迁记录,变迁原因等。还应该包含这张表由谁负责、具体到所属业务部门等。
- 数据的业务属性信息,首先为业务服务,它的采集和展示也就需要尽可能的和业务环境相融合,只有这样才能真正发挥这部分元数据信息的作用。
元数据管理工具
- 常见的元数据管理工具Atlas。Atlas是Hadoop平台元数据框架,为组织提供了开放的元数据管理和治理功能。
数据质量监控
为什么要做数据质量监控
数据不一致
- 由企业早期建设系统没有做统一规划,各系统建设的指标不同,个系统的数据的属性信息设置和要求不统一性,各系统相互独立使用,无法及时同步更新相关信息等各种原因造成系统间的数据不一致,严重影响了各系统间的数据交互和统一识别,基础数据难以共享利用,数据的深层价值也难以体现。
数据不完整
- 由于企业各信息系统孤立使用,各个业务系统或模块按照各自的需要录入数据,没有统一的录入工具和数据出口,业务系统不需要的信息就不录入,造成同样的数据在不同的系统有不同的属性信息,数据完整性无法得到保障。
数据不合规
- 没有统一的数据管理平台和数据源头,数据的生命周期管理不完整,同时企业各信息系统的数据录入环节过于简单且手工参与较多,就数据本省而言,缺少是否重复、合法、对错等校验环节,导致各个信息系统的数据不够准确,格式混乱,各类数据难以集成和统一,没有质量监控导致海量数据质量过低而难以被利用,且没有相应的
数据管理流程。数据不可控
- 海量数据存在多头管理,缺少专门对数据进行管理、监控、控制的组织,缺少一个组织从全局的视角对数据进行管理,导致无法建立统一的数据管理标准等,相应的数据管理制度,办法等无法得到落实。
数据冗余
- 各个信息系统对数据的标准规范不同、编码规范不同、校验规则不同,且部分业务系统对数据的校验标准严重缺失,造成了企业顶层视角的数据出现了“一物多码”、“一码多物”等现象。
数据质量监控方法
数据质量监控的设计分为4个模块:数据,规则,告警和反馈
- 数据:需要被监控的数据,可能存放在 不同的存储引擎中。
- 规则:值如何设计发现异常的规则,一般而言主要是数值的异常和环比等异常监控方式。也会有一些通过算法来发掘异常数据的方法。
- 告警:告警是指发告警的动作,这里可以通过微信消息,电话或者短信,邮件。
- 反馈:反馈是指对告警内容的反馈。如收到了告警内容,需要有人员回复是否真异常,是否处理。有了反馈机制机制,整个数据监控才能形成闭环
数据质量监控工具
常见的数据质量监控工具Griffin。Griffin是一个开源的数据质量解决方案,支持批处理和流模式两种数据质量检测方式,可以从不同维度度量数据资产,从而提升数据的准确度,可信度。
数据仓库命名规范
1 数据库命名
- 命名规则:数仓对应层
- 命名示例:ods / dwd / dws/ dim / temp / ads
2、数据仓库各层对应数据库
- ods层 -> ods_{业务线|业务项目}
- dw层 -> dwd_{业务线|业务项目} + dws_{业务线|业务项目}
- dim层 -> dim_维度表
- ads层 -> ads_{业务线|业务项目} (统计指标等)
- 临时数据 -> temp_{业务线|业务项目}
3、表命名
- ods层: ods_{业务线|业务项目}[数据来源类型]{业务}
- dwd层: dwd_{业务线|业务项目}{主题域}{子业务}
- dws层: dws_{业务线|业务项目}{主题域}{汇总相关粒度}_{汇总时间周期}
- ads层: ads_{业务线|业务项目}{统计业务}{报表form|热门排序topN}
- dim层: dim_{业务线|业务项目|pub公共}_{维度}