为什么需要数据仓库
随着公司业务不断发展,数据种类和存储呈现爆发式增长,繁多的业务数据如何被各业务中心分析和使用,如何有效组织和管理大量业务数据,减少大数据平台相近逻辑重复计算、相近数据重复存储,都将面临巨大挑战。
数据仓库层次架构
数据仓库层次整体划分为三层:近源数据层、整合数据层和应用数据层,如下图:
近源数据层
近源层是数据仓库拷贝源数据提供整合的数据存储区域,粒度、结构和源系统保持相同
- 缓冲区:保存源系统每天的增量数据,可根据应用需要保留适当历史周期的数据,不长期保存数据
- 操作区:存储数据仓库最细节数据,按照业务源系统分类划分;对数据做结构化处理,完整保留所有细节数据。
近源层是整个数据仓库中数据量***的部分。
整合数据层
- 明细区:采用维度建模方法,整合近源层数据,进行适度的反范式设计明细事实数据表。
- 汇总区:根据应用层和其他下游系统取数需要,对明细事实数据进行适度汇总,提升取数性能。
- 维度区:数仓统一维度数据模型。
应用数据层
应用数据层为个性化汇总层,针对不是很通用统计维度、指标存放在此层中,本层计算通常只有自身业务关注的维度和指标,和其他业务线一般无交集 。
数据建模
数据建模是数据仓库中的核心工作,苏宁数据建模主要采用的kimball维度建模方法,建模主要分两块,维度表设计和事实表设计。
维度表设计
维度是数据仓库的核心,他提供了数据分析的视角和标准,大部分的维度表数据量都相对较小,但是他是整个数据仓库的核心,整个的数据建模都是围绕着维度来建设。
维度表主键
维度表在数据仓库中有不可替代的重要地位,因此维度表主键的确认也尤其重要,维度表的主键用于和事实表做关联使用,所以维度表主键也为事实表的外键,维表主键可由有业务含义的自然键组成;也可由无意义的代理建组成,比如使用流水号、自然键+日期等方式。
维表相对静态、不随时间变化直接使用自然键作为主键,比如:业务状态码、性别、城市省份等不会随着时间改变而改变主键对应业务含义,一般直接使用业务自然键作为主键;维表随着时间的变化而产生变化需要考虑使用代理键作为主键。苏宁门店代码,会因为组织法人等信息变更,生门店代码会发生变化,对应主键的业务含义会随着时间的变化而改变,使用一个代理键和业务门店代码映射,可以识别历史和当前不通的门店代码为一个门店。
实际使用过程中,由于在大数据平台中生成稳定代理键和自然键关系比较复杂,一般使用流水号代理键使用非常少。
维度反规范化处理
在OLTP系统中,一般表设计都遵循3NF等规范化要求要求建立数据模型,这个可以有效避免数据冗余以及数据不一致性,如下图: