跳到主要内容

数仓

介绍下数据仓库

数据仓库(DataWarehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化的(Time Variant)数据集合,用于支持管理决策(Decision-Making Support)。该书还提供了建立数据仓库的指导意见和基本原则。凭借着这本书,Bill Inmon 被称为数据仓库之父。

数据仓库的特征

  • 面向主题的
  • 集成的
  • 稳定的
  • 反映历史变化的

数据仓库与数据库的区别

数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。

OLTP(On-Line Transaction Processing 联机事务处理),也称面向交易的处理系统。主要针对具体业务在数据库系统的日常操作,通常对少数记录进行查询、修改。

用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。

传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。

OLAP(On-Line Analytical Processing 联机分析处理),一般针对某些主题的历史

数据进行分析,支持管理决策。

数据仓库的出现,并不是要取代数据库:

  • 数据仓库主要用于解决企业级的数据分析问题或者说管理和决策
  • 数据仓库是为分析数据而设计,数据库是为捕获和存储数据而设计
  • 数据仓库是面向分析,面向主题设计的,即信息是按主题进行组织的,属于分析
  • 型;数据库是面向事务设计的,属于操作型
  • 数据仓库在设计是有意引入数据冗余(目的是为了提高查询的效率),采用反范
  • 式的方式来设计;数据库设计是尽量避免冗余(第三范式),一般采用符合范式
  • 的规则来设计
  • 数据仓库较大,数据仓库中的数据来源于多个异构的数据源,而且保留了企业的
  • 历史数据;数据库存储有限期限、单一领域的业务数据
对比内容数据库数据仓库
数据内容近期值、当前值历史的、归档的数据
数据目标面向业务操作面向管理决策、面向分析(主题)
数据特性动态频繁更新静态、不能直接更新;定时添加数据
数据结构高度结构化、满足第三范式简单的、冗余的、满足分析的
使用频率
数据访问量访问量大;每次访问的数据量少访问量小;每次访问的数据量大
对响应时间的要求低(不敏感)

数据集市

数据仓库(DW)是一种反映主题的全局性数据组织。但全局性数据仓库往往太大,在实际应用中将它们按部门或业务分别建立反映各个子主题的局部性数据组织,即数据集市(Data Mart),有时也称它为部门数据仓库。

数据集市:是按照主题域组织的数据集合,用于支持部门级的数据分析与决策。如在商品销售的数据仓库中可以建立多个不同主题的数据集市:

  • 商品采购数据集市
  • 商品库存数据集市
  • 商品销售数据集市

数据集市仅仅是数据仓库的某一部分,实施难度大大降低,并且能够满足企业内部部分业务部门的迫切需求,在初期获得了较大成功。但随着数据集市的不断增多,这种架构的缺陷也逐步显现。企业内部独立建设的数据集市由于遵循不同的标准和建设原则,以致多个数据集市的数据混乱和不一致,形成众多的数据孤岛。

企业发展到一定阶段,出现多个事业部,每个事业部都有各自数据,事业部之间的数据往往都各自存储,各自定义。每个事业部的数据就像一个个孤岛一样无法(或者极其困难)和企业内部的其他数据进行连接互动。这样的情况称为数据孤岛,简单说就是数据间缺乏关联性,彼此无法兼容。

维度模型

维度模型是数据仓库领域的Ralph Kimball大师所倡导的,他的《数据仓库工具箱》是数据仓库工程领域最流行的数据仓库建模经典。

维度建模从分析决策的需求出发构建模型,为分析需求服务,重点关注用户如何更快速地完成需求分析,同时具有较好的大规模复杂查询的响应性能。其典型的代表是星型模型,以及在一些特殊场景下使用的雪花模型。其设计分为以下几个步骤:

  • 选择需要进行分析决策的业务过程。业务过程可以是:
  1. 单个业务事件,比如交易的支付、退款等
  2. 某个事件的状态,比如当前的账户余额等
  3. 一系列相关业务事件组成的业务流程
  • 选择数据的粒度。在事件分析中,我们要预判所有分析需要细分的程度,从而决定选择的粒度

  • 识别维表。选择好粒度之后,就需要基于此粒度设计维表,包括维度属性,用于分析时进行分组和筛选

  • 选择事实。确定分析需要衡量的指标

数据仓库分层

数据仓库更多代表的是一种对数据的管理和使用的方式,它是一整套包括了数据建模、ETL(数据抽取、转换、加载)、作用调度等在内的完整的理论体系流程。数据仓库在构建过程中通常都需要进行分层处理。业务不同,分层的技术处理手段也不同。

分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控。详细来讲,

主要有下面几个原因:

  • 清晰的数据结构

​ 每一个数据分层都有它的作用域,在使用表的时候能更方便地定位和理解。

  • 将复杂的问题简单化

    将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的问题,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的地方开始修复。

  • 减少重复开发

    规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

  • 屏蔽原始数据的异常

    屏蔽业务的影响,不必改一次业务就需要重新接入数据。

  • 数据血缘的追踪

​ 最终给业务呈现的是一个能直接使用业务表,但是它的来源很多,如果有一张来源表出问题了,借助血缘最 终能够快速准确地定位到问题,并清楚它的危害范围。

数仓的常见分层一般为3层,分别为:数据操作层、数据仓库层和应用数据层(数据集市层)。当然根据研发人员经验或者业务,可以分为更多不同的层,只要能达到流程清晰、方便查数即可。

数据仓库分层.drawio-2

ODS(Operation Data Store 数据准备区)。数据仓库源头系统的数据表通常会原封不动的存储一份,这称为ODS层,也称为准备区。它们是后续数据仓库层加工数据的来源。ODS层数据的主要来源包括:

  • 业务数据库。可使用DataX、Sqoop等工具来抽取,每天定时抽取一次;在实时

应用中,可用Canal监听MySQL的 Binlog,实时接入变更的数据;

  • 埋点日志。线上系统会打入各种日志,这些日志一般以文件的形式保存,可以用

Flume 定时抽取;

  • 其他数据源。从第三方购买的数据、或是网络爬虫抓取的数据;

DW(Data Warehouse 数据仓库层)。包含DWD、DWS、DIM层,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。

  • DWD(Data Warehouse Detail 细节数据层),是业务层与数据仓库的隔离层。以业务过程作为建模驱动,基于每个具体的业务过程特点,构建细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,也即宽表化处理;

  • DWS(Data Warehouse Service 服务数据层),基于DWD的基础数据,整合汇总成分析某一个主题域的服务数据。以分析的主题为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表;

  • 公共维度层(DIM):基于维度建模理念思想,建立一致性维度;

  • TMP层 :临时层,存放计算过程中临时产生的数据;

ADS(Application Data Store 应用数据层)。基于DW数据,整合汇总成主题域

的服务数据,用于提供后续的业务查询等。

数据建模

常⽤的维度模型类型主要有:

  1. 星型模型:即由⼀个事实表和⼀组维度表组成,每个维表都有⼀个维度作为主键。事实表居中,多个维表呈辐射状分布在四周,并与事实表关联,形成⼀个星型结构。
  2. 雪花模型:在星型模型的基础上,基于范式理论进⼀步层次化,将某些维表扩展成事实表,最终形成雪花状结构。
  3. 星系模型:基于多个事实表,共享⼀些维度表。

什么是 kimball?

是将复杂的业务数据简化为事实表(Fact Table)*和*维度表(Dimension Table),以提升查询性能和易用性。

什么是Inmon?

Inmon 主张从企业全局视角构建标准化、集成化的数据仓库,强调数据的一致性、完整性历史可追溯性

  • Kimball(维度建模)
    • 面向分析,注重易用性和查询性能,适合快速构建数据集市。
    • 常作为数据仓库的前端呈现层(如直接对接 BI 工具)。
  • Inmon(范式建模)
    • 面向业务流程,强调数据整合和规范化,适合构建企业级数据仓库(EDW)。
    • 常作为数据仓库的底层基础层,存储原始、完整的数据。

事实表的类型?

事实表有:事务事实表、周期快照事实表、累积快照事实表、⾮事实事实表。

1) 事务事实表

事务事实表记录的是事务层⾯的事实,保存的是最原⼦的数据,也称“原⼦事实表”。事务事实表中的数据在事务事件发⽣后产⽣,数据的粒度通常是每个事务记录⼀条记录。

2) 周期快照事实表

以具有规律性的、可预⻅的时间间隔来记录事实。它统计的是间隔周期内的度量统计,每个时间段⼀条记录,是在事务事实表之上建⽴的聚集表。

3)累积快照事实表

累积快照表记录的不确定的周期的数据。代表的是完全覆盖⼀个事务或产品的⽣命周期的时间跨度,通常具有多个⽇期字段,⽤来记录整个⽣命周期中的关键时间点。

4)⾮事实型事实表

这个与上⾯三个有所不同。事实表中通常要保留度量事实和多个维度外键,度量事实是事实表的关键所在。

⾮事实表中没有这些度量事实,只有多个维度外键。⾮事实型事实表通常⽤来跟踪⼀些事件或说明某些活动的范围。

第⼀类⾮事实型事实表是⽤来跟踪事件的事实表。例如:学⽣注册事件

第⼆类⾮事实型事实表是⽤来说明某些活动范围的事实表。例如:促销范围事实表。

数据漂移如何解决?

  1. 什么是数据漂移

    通常是指ods表的同⼀个业务⽇期数据中包含了前⼀天或后⼀天凌晨附近的数据或者丢失当天变更的数据,这种现象就叫做漂移,且在⼤部分公司中都会遇到的场景。

  2. 如何解决数据漂移问题?

    • 多获取后⼀天的数据,保障数据只多不少

    • 通过多个时间戳字段来限制时间获取相对准确的数据

数据质量怎么监控

1.定义数据质量维度

完整性

  • 检查数据是否存在缺失值
  • 确保数据记录的完整性

准确性

  • 验证数据是否符合业务规则
  • 检查数据是否与源系统数据一致

一致性

  • 确保数据在不同表之间是匹配的
  • 保证数据在时间序列上的一致性

及时性

  • 监控数据是否在规定的时间内更新
  • 确保数据加载的及时性

唯一性

  • 检查数据是否存在重复记录
  • 对于关键的业务主键

2.数据质量监控工具和技术

  1. 使用ETL工具内置的数据质量检查功能
    • 许多ETL工具(如Informatica PowerCenter、Talend等)都提供了数据质量检查组件。这些组件可以在数据抽取、转换和加载的过程中实时检查数据质量。例如,在Informatica中,可以使用数据质量规则来验证数据的格式、范围等,并且在发现数据质量问题时可以记录日志或者发送警报。
  2. 数据质量监控软件
    • 专门的数据质量监控软件(如Collibra Data Quality、SAP Data Services等)能够提供全面的数据质量评估和监控功能。它们可以连接到数据仓库,自动扫描数据,根据预设的规则生成数据质量报告。这些软件通常具有可视化界面,方便用户查看数据质量指标的变化趋势,还可以设置阈值,当数据质量指标低于阈值时自动发出警报。
  3. SQL查询和脚本
    • 利用SQL查询语句来编写数据质量检查脚本。例如,检查数据的完整性、唯一性等。可以将这些脚本定期运行,将结果存储在日志表中。同时,可以结合调度工具(如Cron)来定时执行这些脚本,实现数据质量的定期监控。
  4. 机器学习和人工智能技术
    • 对于复杂的数据质量问题,如数据异常检测,可以使用机器学习算法。例如,通过聚类算法识别数据中的异常点。如果数据仓库中的交易数据出现了异常的交易金额或者交易频率,机器学习模型可以自动标记这些异常情况。另外,人工智能技术还可以用于预测数据质量问题,提前采取措施。

3.建立数据质量监控流程

  1. 设定监控指标和阈值
    • 根据数据质量维度,确定关键的监控指标。例如,对于数据完整性,可以设定缺失值比例的阈值,如当某张表的缺失值比例超过5%时,就认为数据完整性出现问题。对于数据准确性,可以设定错误数据记录数的阈值等。
  2. 定期监控和报告
    • 按照设定的时间周期(如每天、每周)运行数据质量监控工具或脚本。将监控结果生成数据质量报告,报告中应包含数据质量指标的当前值、历史趋势、问题数据的详细信息等内容。这些报告可以以电子邮件、仪表盘等形式提供给数据仓库管理员和相关业务人员。
  3. 问题处理和反馈
    • 当发现数据质量问题时,及时启动问题处理流程。对于数据缺失问题,可以检查数据抽取过程是否遗漏了某些数据;对于数据错误问题,要追溯到数据源,查找是数据录入错误还是数据转换过程中的错误。处理完问题后,要对数据质量监控系统进行反馈,更新监控指标和阈值,防止类似问题再次出现。

什么是数据集市

数据集市是数据仓库的一个子集,通常是针对特定的业务主题、部门或者用户群体,从数据仓库中抽取相关数据,并进行进一步的加工、组织和呈现,以满足特定的业务分析需求。