概述
- 数据仓库 (DataWarehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合, 用于支持管理决策.
- 将所有的业务数据经汇总处理, 构成数据仓库(DW)
趋势
- 数据仓库是伴随着企业信息化发展起来的, 在企业信息化的过程中, 随着信息化工具的升级和新工具的应用, 数据量变的越来越大, 数据格式越来越多, 决策要求越来越苛刻, 数据仓库技术也在不停的发展.
- 实时数据仓库以满足实时化&自动化决策需求.
- 大数据&数据湖以支持大量&复杂数据类型(文本、图像、视频、音频).
数据库VS仓库
- 存储:
- 数据库面向业务存储, 采用关系建模, 组织规范
- 仓库面向主题(较高层次上对分析对象数据的一个完整并且一致的描述)存储, 采用维度建模, 可能冗余, 相对变化大, 数据量大
- 场景:
- 数据库针对应用(OLTP)
- 仓库针对分析(OLAP)
关系建模VS维度建模
- 关系模型:
- 主要应用与 OLTP 系统中,为了保证数据的一致性以及避免 冗余,所以大部分业务系统的表都是遵循第三范式的.
- 维度模型:
- 关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。所以通常我们采用维度模型建模,把相关各种表整理成两种: 事实表和维度表两种.
维度建模模型
维度设计过程
- 选择业务过程: 对应企业数据仓库总线矩阵的一行.
- 声明粒度: 粒度用于确定某一事实表中的行为表示什么, 建议从原子级别的粒度开始设计.
- 确认维度: 包含应用所需要的用于过滤及分类事实的描述型属性.
- 确认事实: 所有事实只允许与声明的粒度保持一致.
维度表VS事实表
维度表
- 一般是对事实的描述信息. 每一张维表对应现实世界中的一个对象或者概念. 例如:用户、商品、日期、地区等.
- 可以简单地理解维度表包含了事实表中指定属性的相关详细信息. 比如商品维度表和用户维度表.
- 特点:
- 维度表的范围很宽 (具有多个属性, 列比较多)
- 与事实表相比, 行数相对较小
- 内容相对固定: 编码表
事实表
- 事实表中的每行数据代表一个业务事件 (下单、支付、退款、评价等).
- 事实这个术语表示的是业务事件的度量值 (可统计次数、个数、件数、金额等),例如,订单事件中的下单金额.
- 每一个事实表的行包括:
- 具有可加性的数值型的度量值
- 与维表相连接的外键
- 通常具有两个和两个以上的外键
- 外键之间表示维表之间多对多的关系
- 特点:
- 非常大
- 内容相对窄, 列数少
- 经常发生变化, 每天会新增很多
数据仓库建设方法论
分层设计
- 数据分层是数据仓库设计中十分重要的一个环节, 优秀的分层设计能够让整个数据体系更易理解和使用.
- 一般根据具体的业务进行合理的分层设计
- 通常采用四层划分方式: ODS原始数据层, DWD明细数据层, DWM数据中间层 (包括DWS数据服务层和DWT数据主题层) 和ADS数据应用层
ODS (Operation Data Store) 原始数据层
- 保持数据原貌不做任何修改,起到备份数据的作用。
- 数据采用压缩 (如LZO压缩),减少磁盘存储空间(例如:原始数据 100G,可以压缩到 10G 左右)
- 创建分区表,防止后续的全表扫描
DWD (Data Warehouse Detail) 明细数据层
- 对ODS层数据进行提取、清洗 (去除空值, 脏数据, 异常值)、降维、解密脱敏等. 粒度是一行信息代表一次行为.
- 需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型.
- 该层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据
DWM (Data Warehouse Middle) 数据中间层
DWS (Data Warehouse Service) 数据服务层
- 以DWD为基础, 按天进行轻度汇总. 粒度是一行信息代表一天的行为.
DWT (Data Warehouse Topic) 数据主题层
- 以DWS为基础, 按主题进行汇总. 粒度是一行信息代表积累的行为.
ADS (Application Data Store) 数据应用层
面向主题
- 从具体的业务出发, 是分析的宏观领域, 比如供应商主题、商品主题、客户主题和仓库主题.
反范式数据模型
为多维数据分析服务
- 数据报表
- 数据立方体,上卷、下钻、切片、旋转等分析功能.
命名规范
表命名规范
- ODS层命名: ods_表名
- DWD层命名: dwd_dim/fact_表名
- DWS层命名: dws_表名
- DWT层命名: dwt_表名
- ADS层命名: ads_表名
- 临时表命名: xxx_tmp
字段命名规范
参考