定义

数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。

特点

  • 面向主题:数据仓库都是基于某个明确的主题,仅需要与该主题相关的数据,其他的无关细节数据将被排除。

  • 集成的:从不同的数据源采集的数据到同一个数据源,此过程会有一些ETL操作。

  • 随时间变化:关键数据隐式或者显式地基于时间变化。

  • 信息本身相对稳定:数据装入后一般只进行查询操作,没有传统数据库的增删改操作。

数仓建设的原则

  • 自下而上 + 自上而下

  • 高容错性

  • 数据质量监控贯穿整个数据流程

  • 不怕数据冗余,利用存储换易用

数仓分层

层级 全称 中文说明 说明 Hive表命名规范 Hive SQL命名规范
ads application data service 应用层 业务方直接可用的数据 ads_<业务名称>_<产出间隔> ads_<业务名称>_<产出间隔>.sql
dim dimension 维度层 变化频率较小的维度数据。基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。 dim_<业务名称>_<产出间隔> dim_<业务名称>_<产出间隔>.sql
dws data warehouse service 汇总层 按业务主题组织汇总数据,产出通用的指标数据,统一指标计算口径和方法,避免指标冗余计算导致数据不一致。面向具体统计需求的;按业务主题划分;对数据进行高度汇总;同一指标只能存储在一张表中。 dws_<业务名称>_<产出间隔> dws_<业务名称>_<产出间隔>.sql
dwd data warehouse detail 明细层 按业务主题组织明细数据,产出数据格式统一、质量可靠、易于应用的业务明细数据。按业务主题划分;对数据进行清洗、转换、聚合,一般不做汇总操作。为缩短数据计算的链路,没有必要每个ods表都一一建立dwd表。最多的场景是做数据聚合时建立。 dwd_<业务名称>_<产出间隔> dwd_<业务名称>_<产出间隔>.sql
ods operational data store 源数据层 该层接收来自不同源系统数据。为方便问题跟踪和抽取效率,同时保持响应相关需求的能力,该层数据原则上和源系统数据保持一致,不做任何处理。 ods_<业务名称>_<产出间隔> ods_<业务名称>_<产出间隔>.sql

为什么要分层?

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

  • 清晰的数据结构

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

  • 数据血缘追踪

最终给业务呈现的是一个能直接使用的业务表,但是它的来源有很多,如果有一张来源表出了问题,我们希望能够快速定位到问题,并清楚它的危害范围。

  • 减少重复开发

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

  • 把复杂问题简单化

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

  • 屏蔽原始数据的异常

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

数仓的主题

数据仓库主题是从较高层次上对数仓数据业务含义和需求的理解进行归类抽象划分的一种方式。最终会产生比如:订单主题、用户主题、营销主题、财务主题等。

主题主要解决的问题是对数据分门别类的区分,方便业务使用数据以及方便数仓根据数据需求进行数据加工。

主题在物理上存在的形态会出现数据耦合情况,具体如下所示:

data-title

数据质量如何保证

数仓的质量主要包括准确性、完整性、一致性、及时性。保障数据质量,可以从事前、事中、事后入手。

data-quality

  • 事前:进行数据源验证,环境验证等。制定每份数据的质量监控规则,越重要的数据对应的监控规则应该越多。

  • 事中:运行全链路监控,任务运行告警监控。监控和影响数据生产过程,不符合质量要求的数据不算产出数据,对其进行干预,使其不影响下游数据的质量

  • 事后:通过对数据质量情况进行分析和打分,将一些不足和改进反馈给数据监控体系,推动整体数据质量提升

参考