数据仓库的核心要点

定义

数据仓库,由数据仓库之父Bill Inmon 在1991 年出版的“Building the Data Warehouse”定义且被广泛接受的——面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。从定义上来看,数据仓库的关键词为面向主题、集成、稳定、反映历史变化、支持管理决策,而这些关键词的实现就体现在分层架构内。

数仓是面向分析型的,主要集中在数据的ETL、数仓模型的建立、数据治理、数据质量的监控、数据资产的沉淀、数据指标体系的搭建,为了方便快速的达到数据获取和数据支撑的目的,同时规避了数据指标不统一造成的数据准确性不足的问题以及重复建设的冗余而建立的一套公司层面或者业务支撑层面的一套规范化数据流向的方案。

目的

数仓的核心是解决 ETL 任务及工作流的组织、数据的流向、读写权限的控制、不同需求的满足等各类问题,并提供给分析人员一个清晰可用的展现层,方便快速的业务支撑。

特征

  • 1、集成(面向主题)

数据是分散的,由于事务处理应用分散、蜘蛛网问题、数据不一致问题、外部数据和非结构化数据。数据仓库中的数据是为分析服务的,而分析需要多种广泛的不同数据源以便进行比较、鉴别,因此数据仓库中的数据必须从多个数据源中获取,这些数据源包括多种类型数据库以及文件系统等,它们通过数据集成而形成数据仓库中的数据。

这块的集成主要集中在数据源大量的数据预处理工作(ETL),通常的模型方式是通过E-R模型进行数据整合。目的将各个系统中的数据以整个企业角度按主题进行相似性组合和合并,并进行一致性处理,为数据分析决策服务,但是并不能直接用于分析决策。

特点:

  1. 一般是公司总栈层面的整合,所以需要全面了解企业业务和数据;
  2. 实施周期非常长,需要整合全部的数据,并在企业业务角度对数据进行相似性组合和合并,并进行一致性处理;
  3. 对建模人员的能力要求非常高;
  • 2、相对稳定(非易失)

数据仓库中的数据是经过抽取而形成的分析型数据,不具有原始性,主要供企业决策分析之用,执行的主要是‘查询’操作,一般情况下不执行‘更新’操作。同时,一个稳定的数据环境也有利于数据分析操作和决策的制订。

但这也不等于数据仓库中的数据不需要‘更新’操作。一般来说会建立数仓模型一些数据的生命周期管理,依据数仓数据的重要程度、数据调用情况等等指标,对已有的数据进行规范化管理。

  • 3、反映历史变化(全量或者增量变更)

数据仓库中的数据必须以一定时间段为单位进行统一更新,因为数仓数据是支撑公司层面业务数据从开始到发展过程中的所有数据变化,所以需要进行数据全量存储,并记录历史变化的过程,方便业务数据能够溯源。

合并全量数据的方式有三种,分别为全量更新、增量变更及增量流水。

全量更新,数据抽取时把源系统表的数据全量抽取过来,这个一般是每天建立一个时间分区,保留全量的数据,不过缺点很明显就是太占存储空间。

增量变更及增量流水,数据抽取时把源系统表内变化的数据抽取过来。两者区别是,增量变更的数据除了包含新增数据外,还包含对历史数据有变更的数据,而增量流水的数据只包含新增数据。

增量流水的数据处理方法相对简单,直接把增量数据入库到表内即可。增量变更的数据一般采用拉链模型来处理,这样既保证可以查询到任意时刻的历史全量快照,也可以减少数仓的存储空间。

然而,拉链模型有两个明显的缺陷,一个是当发现拉链表内某一扣环的数据异常时,拉链表应如何恢复准确性与完整性,另一个是随着数据不断增加,拉链表会越来越大,每日拉链操作的效率会越来越低。

所以在拉链和全量更新的时候,是根据业务表的具体情况来进行选择的。一般来说,数据量很大,但是每天更新的占的比重很少,才会选择拉链的模式。

数仓分层

很多人都关注数仓分层的具体分法和逻辑,而且目前市场上主流的分层方式眼花缭乱,不过看事情不能只看表面,还要看到内在的规律,不能因为分层而分层。

分层的目的解决当前业务快速的数据支撑目的,为未来抽象出共性的框架并能够赋能给其他业务线,同时为业务发展提供稳定、准确的数据支撑,并能够按照已有的模型为新业务发展提供方向,也就是数据驱动和赋能。

好分层架构,有以下好处:

1)清晰数据结构:每一个数据分层都有对应的作用域,在使用数据的时候能更方便的定位和理解。

2)数据血缘追踪:提供给业务人员或下游系统的数据服务时都是目标数据,目标数据的数据来源一般都来自于多张表数据。若出现目标数据异常时,清晰的血缘关系可以快速定位问题所在。而且,血缘管理也是元数据管理重要的一部分。

3)减少重复开发:数据的逐层加工原则,下层包含了上层数据加工所需要的全量数据,这样的加工方式避免了每个数据开发人员都重新从源系统抽取数据进行加工。

4)数据关系条理化:源系统间存在复杂的数据关系,比如客户信息同时存在于核心系统、信贷系统、理财系统、资金系统,取数时该如何决策呢?数据仓库会对相同主题的数据进行统一建模,把复杂的数据关系梳理成条理清晰的数据模型,使用时就可避免上述问题了。

5)屏蔽原始数据的影响:数据的逐层加工原则,上层的数据都由下一层的数据加工获取,不允许跳级取数。而原始数据位于数仓的最底层,离应用层数据还有多层的数据加工,所以加工应用层数据的过程中就会把原始数据的变更消除掉,保持应用层的稳定性。

一般来说数仓分层有一下几个共性:

1、数据湖,源系统数据归集到数仓的缓冲层,或称为贴源层(ODS);

主要收集来自各业务线或行业内的外部数据并对数据进行汇总,ODS层不承担任何的数据清洗和治理的工作,在数据上和业务系统保持一致,ODS层采用分区表的形式按批次存储据,ODS层保留了业务系统的原始数据,不对外开放查询。

ODS层主要以全量方式同步数据,保留全量数据恢复的能力,同步的数据为T+1的新增和变更记录,永久保存历史数据。

2、数据仓库层,具备数据标准化及合并全量数据的标准层,其中数仓建模主要集中在这一层(DW)。

3、具备主题划分及明细数据整合的主题层(DM)。

4、具备提供数据服务给下游系统使用的集市层,或称为应用层(APP);

其实相对来说数仓模型的建设并不复杂,只要关注以下几点就行:

1、OneData:数仓所有数据只加工一次,对应到数仓的设计层面,要求有统一的维度,对于明细层数据,相同粒度的度量只加工一次,对于汇总层的数据,相同粒度的指标只存在一份。避免重复建设的问题;

2、OneIndex:数仓指标体系都具有唯一性,通过原子指标+派生指标来规范所有的指标系统,避免数据不一致性的问题;

3、OneService:数据服务划清了数据和应用的边界,数据服务提供的是加工好的指标数据,应用通过数据服务,直接获取计算的结果,强制把公共计算逻辑下沉到数据层面,提高了数据的共享能力,避免通过不同层次获取数据导致的数据准确性和安全性的问题;

4、OneLine:最大程度上保障数据流转的透明性,不同层级做不同层级的数据处理逻辑,不可逆向依赖,方便后续数据血缘关系、数据地图的建立,避免数据杂乱,无法溯源;

5、OneEntity:这块主要是模型方面的建设,同一个用户,在同一个模型中,可能存在重复的记录,如何识别两个 ID 是同一个用户,做到所有用户只有唯一的 ID 标识,这个是 OneEntity 要解决的问题,其实归根结底就是ID-Mapping问题。

参考文献链接:https://zhuanlan.zhihu.com/p/225112527

猜你喜欢

转载自blog.csdn.net/weixin_41197407/article/details/115394749