数仓概览
企业决策层级
企业中部署数据仓库,其目的还是要用数据来说明现在的情况,并对下一步的动作计划提供支持。企业的决策可以分成三个层级,如下图所示。
![[Pasted image 20240815090955.png]]
底层可能有操作员就可以执行,比如一个电商订单物流长期处于「发出」状态,可能是出现丢件异常,就需要联系物流进行处理。中层的销售预测,需要根据历史的销售记录为主对未来一段时间的销售进行预测,这一层级可能在特定部门内使用。顶层的新市场识别或者店铺选址等动作,需要考虑整个公司的数据甚至是外部的数据,如地理、人口、经济数据等结合起来而作出决策。
因此,在建立数据仓库或者数据中台的时候,不是说越复杂的系统就越好,关键是看需要支持怎么样的决策层级。其次还要考虑实施难度和建设周期等多个方面的因素。
数据库技术限制
如果单纯考虑超时提醒功能,可以直接在关系型数据库中实现。但是上层的决策,在关系型数据库上开发可能会遇到以下的3个问题。
性能限制:
- 不能同时保证事物处理和BI决策类型的统计查询;
集成度不够:
- C/S,B/S架构,数据库独立服务特定应用,数据是分散的
- 还有外部数据源的数据
- 各系统间的名称、单位口径的统一
方法工具的缺失
- 统计查询的优化
- 数据建模的方法论
- 配套的统计查询和统计分析工具
基于以上原因,数据仓库与业务数据库有不同的底层设计。
数据仓库的定义
数据仓库是一个面向主题的、集成的、非易失的,随时间变化的用来支持管理人员决策的数据集合。
——《数据仓库(第4版)》
面向主题,是指对应企业中某一宏观分析领域所涉及的分析对象
- 例如:"销售分析"就是一个分析领域
- 这个"销售分析"所涉及到的分析对象为商品、供应商、顾客、仓库等,那么数仓主题可以确定为商品主题、供应商主题、顾客主题、仓库主题
- 数据层面来说,主题之间可能存在数据重叠关系
集成
- 数据来自于多个异构数据源
- 标准化的数据集成方法
非易失
- 与数据源的数据分离保存
- 一旦数据写入数据仓库,不进行更新
- 数据仓库的数据只支持数据的初次加载和访问
随时间变化
- 保留历史数据(数据的快照)
- 数据仓库的数据包含时间元素(记录时间戳)
- 数据追加方式通过不同时间上数据的变化实现
什么是数仓仓库建模?
数据仓库建模(Data Warehouse Modeling)是指在数据仓库(Data Warehouse)中组织和设计数据的过程,以便支持数据分析、报告和决策制定。
数据仓库是一个集成的、主题导向的数据存储,用于存储来自不同来源的数据,经过清洗、转换和集成,以支持业务分析和决策。主要目标是创建一个能够满足用户需求的数据结构,以便用户可以轻松地查询和分析数据。
数据仓库建模的选择取决于业务需求、数据的性质以及可用的技术和工具。建立一个有效的数据仓库模型可以帮助组织更好地理解其业务数据,做出更明智的决策,并提高业务绩效。
数仓建模
维度建模
维度建模的起源可以追溯到 20 世纪 80 年代末和 90 年代初,当时数据仓库和商业智能的概念开始崭露头角。维度建模的方法论主要由 Ralph Kimball 和他的团队推动和发展,他们在这一领域的工作对商业智能和数据仓库的发展产生了深远的影响。
维度建模方式 | 建模方式说明 | 优点 | 缺点 |
---|---|---|---|
星型模型 | 由一个事实表和一组维表组成,维表只和事实表关联,维表之间没有关联;每个维表的主码为单列,且该主码放置在事实表中,作为两边连接的外码;以事实表为核心,维表围绕核心呈星形分布。其优点是查询性能高、易于理解和使用,适合即席查询和复杂报表;缺点是数据冗余可能较多。 | 查询性能高,易于理解和使用,适合即席查询和复杂报表 | 数据冗余可能较多 |
雪花模型 | 是对星型模式的扩展,每个维表可继续向外连接多个子维表。它相当于将星形模式的大维表拆分成小维表,满足了规范化设计,但这种模式在实际应用中较少见,因为会导致开发难度增大,而数据冗余问题在数据仓库里并不严重。 | 规范化程度高,节省存储空间 | 查询性能相对较低,表连接复杂 |
星座模型 | 是星型模式的扩展,当维度空间内的事实表不止一个,且一个维表可能被多个事实表用到时,就形成了星座模式。它允许星形模式中出现多个事实表,主要作用包括共享维度和设置细节/聚集事实表。在业务发展后期,绝大部分维度建模都采用的是星座模式。 | 能共享维度表,灵活性高 | 设计和维护较为复杂 |
维度模型是一种用于设计数据仓库的模型,主要用于支持数据分析和报告。这种模型通过组织数据成维度表和事实表的结构,使得用户能够以直观的方式理解和查询数据。
事实表
事实表是数据仓库中存储了业务过程中产生的事实性数据的表格。它包含了数值性能度量或事实,例如销售额、数量、利润、点击次数等,这些数据通常是可以被聚合、分析和计算的。
事实表通常与维度表相结合,通过外键与维度表关联,以提供数据的上下文信息和多维分析的可能性。
举个例子,假设我们有一个在线零售商店,它包含了销售数据。
事实表 - 销售事实表
订单ID | 产品ID | 日期ID | 客户ID | 销售额 | 数量 |
---|---|---|---|---|---|
1001 | 101 | 500 | 200 | 150 | 2 |
1002 | 102 | 501 | 201 | 75 | 1 |
1003 | 103 | 502 | 202 | 100 | 3 |
在这个例子中,事实表包含了几个重要的字段:
- 订单ID:唯一标识每个销售订单的ID。
- 产品ID:与产品维度表关联的外键,提供了有关销售的产品信息。
- 日期ID:与日期维度表关联的外键,提供了销售发生的日期信息。
- 客户ID:与客户维度表关联的外键,提供了购买客户的信息。
- 销售额:表示每个订单的销售金额。
- 数量:表示每个订单中产品的数量。
这个事实表中的数据可以用于进行多种分析,例如按日期分析销售趋势、按产品类别分析销售额、按客户分析购买习惯等。通过与维度表的结合,可以进行复杂的多维分析,帮助企业了解业务运营的各个方面。
事实表类型
事实表可以根据存储的数据类型和所描述的业务过程类型来进行分类。
1.累积事实表
这种事实表包含了事务型数据的累积值,通常用于记录累积的总量或累积的周期性度量。例如,累积销售事实表记录了累计的销售额、总利润、总销售量等数据。
日期ID | 产品ID | 累计销售额 | 累计利润 | 累计销售量 |
---|---|---|---|---|
... | ... | 50000 | 15000 | 1000 |
... | ... | 52000 | 16000 | 1050 |
2.快照事实表
这种事实表记录了在特定时间点或时间段内的业务度量值。快照通常定期捕获数据的状态,而不是随着每个业务事件的发生而更新。
快照日期 | 产品ID | 当日销售额 | 当日订单数 |
---|---|---|---|
日期1 | 产品1 | 1000 | 25 |
日期2 | 产品1 | 1200 | 30 |
3.事务事实表
这种事实表记录了每个业务事件的详细事务数据,每一行代表一个独立的事务或事件。它们通常是针对某个特定的业务过程,包含了每次事务的数据。
订单ID | 产品ID | 日期ID | 客户ID | 销售额 | 数量 |
---|---|---|---|---|---|
1001 | 101 | 500 | 200 | 150 | 2 |
1002 | 102 | 501 | 201 | 75 | 1 |
4.周期性快照事实表
类似于快照事实表,但记录了经过一定时间间隔的快照数据。这种类型的事实表通常用于分析跨越不同时间段的变化趋势。
日期范围 | 产品ID | 月销售额 | 季度销售额 |
---|---|---|---|
2023年1月 | 产品1 | 500 | 1500 |
2023年2月 | 产品1 | 600 | 1400 |
这些不同类型的事实表在数据仓库中有不同的用途和分析方法,根据业务需求选择合适的事实表类型有助于更有效地进行数据分析和洞察。
维度表
维度表是数据仓库中存储描述业务对象的结构化信息的表格,它包含了用于分析的各种维度的详细信息。
维度表通常包含描述业务过程中的人、地点、时间、产品或事件等的属性。这些表格通常具有清晰的层次结构,用于帮助用户理解和分析数据。
维度表类型
1.时间维度表
时间维度表是描述日期、时间和与之相关的层次结构信息的表格,例如年、季节、月份、日期、周几等。它能支持按时间进行数据分析,比如时间趋势分析、周期性分析等。
日期ID | 日期 | 年份 | 季节 | 月份 | 周 | 节假日 |
---|---|---|---|---|---|---|
500 | 2023-01-01 | 2023 | 冬季 | 1 | 周一 | 是 |
501 | 2023-01-02 | 2023 | 冬季 | 1 | 周二 | 否 |
2.产品维度表
产品维度表包含有关产品的详细信息,例如产品名称、类别、型号、制造商等,有助于对产品销售情况进行分析。
产品ID | 产品名称 | 类别 | 型号 | 制造商 |
---|---|---|---|---|
101 | 手机 | 电子产品 | ABC123 | 公司A |
102 | 电视 | 家电 | XYZ789 | 公司B |
3.地点维度表
地点维度表包含有关地理位置的信息,比如国家、城市、区域、地址等,支持地理位置相关的数据分析。
地点ID | 国家 | 省份 | 城市 | 区域 |
---|---|---|---|---|
201 | 中国 | 广东省 | 深圳市 | 南山区 |
202 | 美国 | 加利福尼亚州 | 洛杉矶 | 市中心 |
4.客户维度表
客户维度表包含有关客户的信息,如客户ID、姓名、性别、年龄、职业等,支持对客户行为和特征的分析。
客户ID | 姓名 | 性别 | 年龄 | 职业 |
---|---|---|---|---|
301 | 张三 | 男 | 35 | 工程师 |
302 | 李四 | 女 | 28 | 教师 |
维度表提供了数据的上下文和描述性信息,与事实表结合使用可以进行复杂的多维分析,帮助用户更好地理解业务数据并作出有效的决策。
数仓分层
在数仓中,通常有五层,分别为:ODS、DWD、DIM、DWS、ADS,每层存储的数据都不一样,负责的业务也不同,下面将展开说说这五层的作用以及示例。
ODS 源数据层
ODS 层是用于存储经过简单清洗、结构化、汇总的源系统数据的地方,它通常直接接收来自各个操作系统的数据,并保留了更接近源系统的数据。
从不同业务系统(如销售系统、库存系统)获取数据,将其整合、清洗并存储在 ODS 中。
ODS 层表示例
订单原始数据表
order_id | customer_id | product_id | order_date | order_amount |
---|---|---|---|---|
1001 | 2001 | 3001 | 2023-01-05 | 150.00 |
1002 | 2002 | 3002 | 2023-01-06 | 80.00 |
1003 | 2001 | 3003 | 2023-01-07 | 200.00 |
客户原始数据表
customer_id | customer_name | customer_address | registration_date |
---|---|---|---|
2001 | Alice | 123 Main St, Anytown | 2022-12-20 |
2002 | Bob | 456 Park Ave, Othertown | 2023-01-01 |
2003 | Carol | 789 Elm St, New City | 2023-01-10 |
产品原始数据表
product_id | product_name | product_category | product_price |
---|---|---|---|
3001 | Phone | Electronics | 500.00 |
3002 | TV | Appliances | 300.00 |
3003 | Laptop | Computers | 1200.00 |
DWD 明细数据层
DWD 层是数据仓库的核心层级,用于存储经过清洗、集成和建模的数据,以支持企业级的数据分析和决策需求。这一层通常包括了清洗后的事实表和维度表,支持多维分析。
在 DWD 中创建了销售事实表、产品维度表、时间维度表等,以支持企业级的销售分析和报表需求。
DWD 层表示例
订单事实表
order_id | customer_id | product_id | order_date | order_amount |
---|---|---|---|---|
... | ... | ... | ... | ... |
客户维度表
customer_id | customer_name | customer_address | registration_date |
---|---|---|---|
... | ... | ... | ... |
产品维度表
product_id | product_name | product_category | product_price |
---|---|---|---|
... | ... | ... | ... |
DIM 公共维度层
DIM 层是用于存储维度模型的地方,其中包含了业务维度和度量,以便于进行多维度的分析和查询。这个层级可以支持数据的分组和聚合,以提供更快的查询性能。
在 DIM 中包含了产品、地区、时间等维度,以及关联的度量,为业务用户提供了灵活的多维度分析能力。
DIM 层表示例
时间维度表
date | year | month | day | week | quarter | holiday_flag |
---|---|---|---|---|---|---|
... | ... | ... | ... | ... | ... | ... |
地域维度表
country | state/province | city | region |
---|---|---|---|
... | ... | ... | ... |
支付方式维度表
payment_method_id | payment_method_name |
---|---|
... | ... |
DWS 数据汇总层
DWS 层是对数据进行聚合、汇总或预计算的地方,以优化复杂查询的性能,提供快速的汇总结果。它可以包括预聚合的数据或某些业务计算结果。
在 DWS 中,可能包括了每日销售总额、每月客户活跃度等预计算结果,以提高复杂查询的性能。
DWS 层表数据
每日销售总额表
date | total_sales_amount |
---|---|
... | ... |
每月客户活跃度表
month | active_customers_count |
---|---|
... | ... |
ADS 数据应用层
ADS 层是根据特定业务需求定制的数据服务层,它可能会整合来自多个层级的数据,提供给特定应用程序或业务需求使用。
构建了专门为某个特定业务应用程序提供数据支持的数据服务接口,使其能够访问 DWD、DWS 和 DIM 中的数据。
ADS 层数据一般以数据立方体形式存储在多维数据库中,具体说明见[[数据立方体(OLAP cube)]]
ADS 层接口示例
销售分析应用接口
接口提供从订单事实表和维度表获取信息,支持销售分析和报告。
用户行为分析应用接口
接口提供从订单事实表、客户维度表和时间维度表获取信息,支持用户行为分析和趋势报告。
这五层架构在数据仓库中起着不同但相互补充的作用,以支持各种层次的数据需求,从源系统的操作数据到支持决策分析的维度模型,再到特定应用的定制数据服务。
数仓分层的优势
- 数据组织和管理
分层架构有助于将数据组织成不同的层级,使数据管理更为清晰和有序。每个层级都有特定的功能和目的,有利于更好地管理数据的流动和处理过程。 - 数据质量和一致性
分层能够帮助确保数据的质量和一致性。在不同的层级对数据进行清洗、整合和转换,有助于消除数据中的错误或不一致性,并确保数据的准确性和可靠性。 - 多维度分析和查询
分层架构中的维度模型和数据仓库层支持多维度的数据分析和查询,使得用户能够从不同的角度对数据进行探索和分析,支持更深入的业务理解和决策制定。 - 性能优化
通过在数据仓库汇总层进行数据预计算和汇总,可以提高查询性能和响应速度。预计算结果可以在需要时被快速查询,降低复杂查询的计算成本。 - 灵活性和适应性
分层架构使得数据仓库能够更灵活地适应不同的业务需求和数据访问模式。它能够根据特定需求提供定制化的数据服务,从简单操作到高级分析都能得到支持。 - 安全和数据治理
每个层级都可以进行数据访问控制和安全管理,有利于实现数据的安全性和合规性。此外,分层架构有助于建立数据治理策略,确保数据在整个流程中得到适当的管理和监控。 - 业务与技术的分离
分层架构可以帮助将业务逻辑与技术实现分离,使得业务用户更专注于数据的使用和分析,而技术团队则负责数据的处理和管理。
分层架构使得数据仓库更具可管理性、可扩展性和灵活性,支持了数据的高效管理、多样化使用和高质量分析,对企业的数据驱动决策和业务发展起到了关键作用。
没有评论