数据仓库概念
- 可以把数据仓库认为是一个国道汇总到高速的一个高速中转站,负责收集这些不同地方来源的数据,统一归纳整理好再放到高速上去用,达到高效数据中转的效果
- 数据仓库的目的就是为了统筹集中所有可以使用的数据,构建面向分析的集成数据环境,通过最终数据分析结果为企业提供决策导向支持
- 对于整个数据仓库而言,它不需要生产数据,也不用消费数据,而是通过数仓的一系列处理运算操作,将结果提供给外部
数据仓库整体架构
ODS层(Operational Data Store)
- 操作型数据存储层
- 用于存储从业务系统中抽取的原始数据,数据一般未经处理或仅进行了简单的清洗,保持其原始状态
DWD层(Data Warehouse Detail)
- 明细数据层
- 将ODS层的原始数据进行清洗、转换,存储详细的、经处理的数据,用于支持详细的业务分析需求
DWS层(Data Warehouse Summary)
- 汇总数据层
- 对DWD层的数据进行聚合和汇总,生成更高层次的统计数据和指标,便于快速查询和分析
DIM层(Dimension)
- 维度数据层
- 存储用于数据分析的维度数据,这些维度数据描述了事实表中的度量数据的上下文,如时间、地点、产品、客户等
ADS层(Application Data Store)
- 应用数据层
- 存储为特定应用或分析需求准备的汇总数据,支持特定的业务应用、报表和分析需求
数仓三层架构
数据采集层
- 首先我们需要存储对应业务相关的数据,通过外部来源数据进行整合
- 因为数据来源不同,非一致性质格式数据,需要通过ETL进行数据的转换处理,统一格式放入我们的数据仓库中
数据加工层
- 数仓核心功能,需要将汇总的数据全部处理成我们可以进行分析的数据,不希望损失原始数据信息
- 一般我们将数据仓库分为三层,自下而上,逐层提取精炼
数据引入层ODS(Operational Data Store)
- 一般来说ODS可以说得上是作为一张原始数据表的映射表,存放未经过处理的原始数据至数据仓库系统,结构上与原始数据信息保持一致,是数据仓库的数据准备缓存区
- 还可以起到保存历史数据记录的作用,也可增加字段,存储的历史数据是只读的
在离线数仓中,业务数据定期通过ETL流程导入到ODS中,导入方式有:
- 全量导入:数据第一次导入时,选择此种方式
- 增量导入:数据非第一次导入,每次只需要导入新增、更改的数据,建议使用外连接&全覆盖方式
数据公共层CDM(Common Data Model)
- 又称通用数据模型层,包括DIM维度表、DWD和DWS,由ODS层数据加工而成
- 主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标
- 最后为ADS层服务,那么首先要提取出业务以及分析主题两个抽象事物,需要统一口径
说明 | 案例 | |
---|---|---|
公共维度汇总层DIM(Dimension) | 主要由维度表(维表)构成,公共维度汇总层(DIM)首先需要定义维度,建立整个企业的一致性维度,降低数据计算口径和算法不统一风险 | 对于招标业务,可能需要考虑的维度有:招标项目、招标公司、招标类别、地理区域、时间维度(年、季度、月、日)、项目负责人、投标状态 |
明细粒度事实层DWD(Data Warehouse Detail) | 将ODS层中的原始数据进行清洗和转换,可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理,明细粒度事实层的表通常也被称为逻辑事实表 | 对于招标业务,招标明细可能有:招标项目ID、招标项目名称、招标类别ID、地区ID、项目负责人ID、投标公司ID、投标金额、投标日期、投标状态、投标次数等 |
公共汇总粒度事实层DWS(Data Warehouse Summary) | 将详细的数据进行汇总,公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据,首先确定需要进行汇总的数据以及汇总的维度和指标,接着设计汇总粒度的事实表结构,选择合适的度量值和维度 | 对于招标业务,可能需要按时间、地区、投标公司、招标类别、项目负责人维度进行汇总,汇总度量值可能有总投标金额、中标金额、投标次数、中标次数等 |
- 维度是逻辑概念,是衡量和观察业务的角度,维表是根据维度及其属性将数据平台上构建的物理化的表,采用宽表设计的原则
代码举例
-- 创建DWS汇总事实表
CREATE TABLE DWS_招标汇总 (
时间ID INT,
地区ID INT,
投标公司ID INT,
招标类别ID INT,
项目负责人ID INT,
总投标金额 DECIMAL(18, 2),
中标金额 DECIMAL(18, 2),
投标次数 INT,
中标次数 INT,
PRIMARY KEY (时间ID, 地区ID, 投标公司ID, 招标类别ID, 项目负责人ID)
);
-- 插入汇总数据到DWS_招标汇总表
INSERT INTO DWS_招标汇总 (时间ID, 地区ID, 投标公司ID, 招标类别ID, 项目负责人ID, 总投标金额, 中标金额, 投标次数, 中标次数)
SELECT
时间ID,
地区ID,
投标公司ID,
招标类别ID,
项目负责人ID,
SUM(投标金额) AS 总投标金额,
SUM(CASE WHEN 投标状态 = '中标' THEN 投标金额 ELSE 0 END) AS 中标金额,
COUNT(*) AS 投标次数,
SUM(CASE WHEN 投标状态 = '中标' THEN 1 ELSE 0 END) AS 中标次数
FROM
FACT_招标
GROUP BY
时间ID,
地区ID,
投标公司ID,
招标类别ID,
项目负责人ID;
数据应用层ADS
- 存放数据产品个性化的统计指标数据,根据CDM与ODS层加工生成
- 主要是提供给数据产品和数据分析使用的数据,一般会存放在ES、PostgreSql、Redis等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用
数据仓库 VS 数据库
数据仓库 | 数据库 | |
---|---|---|
设计目的 | 主要用于在线分析处理(OLAP),支持复杂的查询和数据分析 | 主要用于在线事务处理(OLTP),支持日常业务操作和事务处理 |
功能 | 聚合、清洗和转换大量的历史数据,支持决策支持系统(DSS)和商业智能(BI)应用 | 处理频繁的数据插入、更新和删除操作,确保数据的实时性和一致性 |
使用场景 | 用于支持数据分析和商业报告,如市场分析、销售趋势分析、财务报表分析等 | 用于支持业务应用程序,如电子商务网站、银行交易系统、企业资源规划(ERP)系统等 |
数据结构 | 通常是非规范化的(如星型或雪花型模式),以提高查询性能和分析效率 | 通常是高度规范化的(第三范式),以减少数据冗余和提高数据一致性 |
存储方式 | 存储大量的历史数据,数据量庞大,数据更新频率较低 | 存储当前的操作数据,数据量相对较小,数据频繁更新 |
示例 | 销售事实表、客户维度表、时间维度表等 | 客户信息表、订单表、库存表等 |
优化目标 | 优化查询性能,支持复杂的多维分析和大规模数据处理 | 优化事务处理性能,确保快速的读写操作 |
技术 | 使用分区、聚合索引、物化视图等技术来提高查询速度 | 使用索引、事务处理、锁机制等技术来保证数据一致性和操作性能 |
数据处理 | 处理批量数据,数据从多个源系统抽取、转换后加载(ETL) | 处理实时数据,支持并发的读写操作 |
数据加载 | 通常通过ETL流程进行批量数据加载,数据加载过程可能在非高峰期进行 | 主要通过应用程序直接插入或更新数据 |
用户 | 主要是数据分析师、数据科学家、商业用户,进行数据分析和报表生成 | 主要是应用程序和终端用户,进行日常的业务操作 |
操作类型 | 复杂的查询和分析操作,注重数据的整合和历史数据分析 | CRUD操作(创建、读取、更新、删除),注重事务的原子性和一致性 |
数据集成 | 处理多个业务领域的数据,集成度较高,跨多个系统和数据源 | 通常处理单一业务领域的数据,集成度较低 |
数据源 | 来自多个异构数据源,包括内部业务系统、外部数据源、日志数据等 | 主要来自内部业务系统 |
数据规模 | >=TB | GB到TB |
数据仓库基本特征
- 数据仓库是面向主题设计的,属于OLAP(在线分析处理)系统,主要操作是批量读写,关注数据整合,以及分析、处理性能,会有意引入荣誉,采用反范式方式设计
- 面向主题:数据仓库以主题为导向来组织数据,而不是以应用程序或事务为导向,主题可以是销售、客户、产品、财务等,它们反映了业务的主要领域,这种主题导向的数据组织方式便于用户进行跨部门和跨业务领域的分析
- 集成性:集成了来自多个异构数据源的数据
- 非易失性:一旦数据被加载到数据仓库中,通常不会被更新或删除,数据仓库中的数据是只读的,新的数据会定期加载进数据仓库,而不是对现有数据进行更新
- 时变性:数据仓库存储随时间变化的历史数据,这意味着数据仓库中的每个数据记录都与一个特定的时间点或时间段相关联
- 面向分析:数据仓库的设计和优化是为了支持复杂的查询和数据分析,支持多维分析(OLAP)和数据挖掘(Data Mining)
- 支持决策支持系统:数据仓库是企业决策支持系统(DSS)的核心,旨在为管理层提供可靠的数据基础,支持战略决策、业务规划和运营管理。它能够集成不同业务领域的数据,提供跨部门的分析能力