1. 数据建模基础概念
1.1 数据建模概述
- 定义:数据建模是将现实业务问题转化为数据结构或模型,便于存储、管理和分析。常用方法包括实体-关系模型(ER模型)和维度建模(如星型模型、雪花模型)。
- 目标:优化数据存储和查询,支持业务运作与决策分析。
ER模型:
- 核心概念:以实体及其关系为核心,表示业务场景的主要元素和它们的相互作用。
- 示例:电商系统中,用户、订单、商品是实体;用户和订单之间是一对多关系,订单和商品之间是多对多关系,通过中间表(订单详情)管理。
维度建模:
- 核心概念:以分析为目的,通过事实表(存储业务事件)和维度表(存储描述性信息)设计数据模型。
- 示例:电商数据分析中,订单事实表记录交易信息,维度表包括用户、商品、时间等维度,构成星型模型。
1.2 数据模型的类型
数据模型通常分为三类:概念数据模型、逻辑数据模型和物理数据模型,它们逐步细化和实现业务需求。
- 概念模型:描述主要实体及其关系,不涉及具体细节。
- 逻辑模型:更详细,定义实体的属性和外键关系,不考虑数据库实现。
- 物理模型:最具体的层次,定义表结构、字段类型、索引等存储细节。
示例:在图书管理系统中,概念模型表示会员、图书、借阅记录的关系;逻辑模型细化到每个表的字段;物理模型则定义SQL表结构及存储优化策略。
2. 数据仓库设计与建模
2.1 数据仓库建模
- 定义:数据仓库建模是根据业务需求设计数据仓库结构,通过分层结构和维度建模优化查询与分析性能。
- 方法:常用的维度建模包括星型模型和雪花模型。
- 分层设计:数据仓库一般划分为ODS层(操作数据存储)、DWD层(明细数据层)、DWS层(汇总数据层)、ADS层(应用数据层)。
维度建模 vs ER建模
- 维度建模:非规范化设计,适合数据仓库,优化查询和分析。
- ER建模:规范化设计,适合事务系统,优化数据一致性与事务操作。
2.2 星型模型与雪花模型的区别
- 星型模型:简单结构,事实表位于中心,维度表直接连接到事实表。查询效率高。
- 雪花模型:规范化设计,维度表进一步分解为子表,减少冗余但查询复杂度增加。
2.4 数据仓库设计步骤
- 需求分析:了解业务需求与数据源。
- 数据源分析:确定数据源结构与质量。
- 数据建模:设计事实表与维度表。
- 分层设计:ODS层到ADS层的分层架构。
- ETL流程设计:定义提取、转换、加载流程。
- 物理设计:定义表结构、索引、分区。
- 查询优化:预计算汇总数据、物化视图等。
- 安全与权限管理:数据访问权限与安全策略。
- 测试与部署:数据质量与性能测试。
- 持续维护与优化:数据更新与扩展性。
3. ETL流程与数据处理
3.1 ETL概述
- 定义:ETL(Extract, Transform, Load)是提取数据、转换格式并加载到目标存储系统的过程,确保数据仓库中数据的高质量和一致性。
- 步骤:
- 提取(Extract):从多个数据源获取数据。
- 转换(Transform):清洗、规范化和聚合数据。
- 加载(Load):将数据加载到数据仓库中。
3.2 数据质量处理
- 数据清洗:去重、处理缺失值、标准化数据。
- 数据验证:类型检查、范围校验、唯一性验证。
- 数据转换:格式转换、派生计算和聚合。
3.3 高效ETL流程设计
- 增量提取:只提取变化数据。
- 并行处理:多线程或分布式处理。
- 批量与实时结合:根据需求选择合适的数据加载方式。
- 日志与监控:记录异常,确保数据一致性。
3.4 ETL工具选择
- Apache NiFi:实时数据处理。
- Talend:适合批量与流式数据处理。
- Informatica:企业级复杂数据集成。
- Apache Spark:大规模并行ETL。
- AWS Glue:云端ETL工具,适合云生态系统。
4. SQL与数据库设计
4.1 高效数据库表设计
- 规范化与适度反规范化:减少冗余,优化查询。
- 选择合适的数据类型:避免过大数据类型。
- 索引设计:为常用查询添加索引,减少插入更新成本。
- 分区与分表:根据字段分区提高查询效率。
- 外键与约束:确保数据完整性,避免性能瓶颈。
4.2 第三范式
- 定义:第三范式要求每个非主属性完全依赖于主键,消除部分依赖和传递依赖,减少冗余。
4.3 SQL查询优化
- 方法:使用索引、分区表、查询重写、减少联表次数、缓存查询结果等策略,优化复杂查询的性能。