浅谈数据仓库分层

一、 目标

了解数仓的“层”以及如何分层

二、什么是“层”

一组对象的集合,包括了表、视图、ETL脚本、调度作业、实施规范等等,因为数仓核心功能之一是存储数据,所以通常层就是指一批表的集合;
在这里插入图片描述

详细解释:

1、 DB对象

表、视图、触发器、存储过程、序列等等,设计时会为同层对象规划独立的路径(例如,Hive的库、Oracle的Schema等);

2、 ETL

封装好的一组sql代码或者ETL工具的作业,核心就是加工数据;

3、 调度任务

用来编排ETL任务,将数据正确的加载到目标表;

4、 实施规范

数据调用规范,模型设计规范等;

三、为啥分层

为了解耦,通常情况下,数据从原始形态到最后的应用,需要经过一系列处理。为了降低数据处理的成本,输出可信一致的数据,我们对整个流程进行类似流水线的拆解。

1. 复杂的工作分解为多步相对简单的工作
2. 每个步骤都由专门的区域负责

拿工厂举例,为啥要设计流水线,大家直接代入进去,我相信基本就能够理解为啥数仓要分层了。

详细解释:

1、 简化数据加工,复杂的操作分成多步简单的操作,降低开发成本;
2、 不同的任务分不同的区域处理,提升开发效率;
3、 清晰数据血缘,提高数据访问、追溯效率;
4、 降低上下游的耦合性,屏蔽底层数据发生改变对上层数据的影响;

核心就一个: 提效降本。

四、如何分层

没有固定的说法,有分3层的,也有分4层甚至更多的。业务复杂就多分,业务简单就少分,没有绝对的。我之前接触的数仓一般都是分四层。

这样:
在这里插入图片描述

4.1 贴源层

也称为缓冲区,主要目的是用最低的成本最快的速度将数据给弄过来,减少对源系统的影响,同时将多源异构的数据转换成统一格式,这里的数据通常与业务系统的数据高度对应,基本是一对一的。

很多公司的数仓到这里其实就完事了,数据已经过来了,剩下的就是分析了。

这样:
在这里插入图片描述

通常给这一层起个学名,有叫ODS的,也有叫SDI或者STAGE的,叫啥名字无需纠结,理解意思就够了。

这里我想补充一下,很多人照图理解,总是把某一层想象成扁平化的一批数据库表,好像数据直接就从源系统抽到了贴源表,然后下游就可以访问了,其实不完全是这样,之前讲了,“层”是一系列对象的集合,内部还可以细分,可以一步、两部、甚至更多,具体看处理的复杂性。只是我们对外发布的时候,分的这么细;

具体的可以参考:
在这里插入图片描述

4.2 模型层

这一层又称为明细层,或者物理模型区,或者叫EDW,反正各家有各家的叫法,我们就选一种比较普遍的,DWD吧。这里主要是对业务数据建模,体现在具体上就是拆表、并表、刷key,这里的数据基本上都是明细数据。

1、主要工作

1. 数据清洗	
2. 数据转码
3. 统一格式
4. 标准命名
5. 数据整合
等等,

本质上行就是标准化和一致化工作,最终的目的就是输出整洁、一致、可信的数据;

2、详细解释

数据清洗

过滤没有价值的脏数据(一般是数据管家探查,然后与业务确定规则,最后数仓实施)

数据转码:

布尔类型的数据,各个源系统码值不一样,比如: 1/0、Y/N,数仓统一用一套

统一格式:

典型的就是日期,选一套清晰的,统一即可,例如:'yyyy-MM-dd'

标准命名:

同名同义、异义不同名、简洁美观、易理解

数据整合:

记录整合、字段整合、事实表刷key,这里不展开

上述都是可选的,大部分企业没有建模,基本上就是直接从上游抽过来,能够翻译一下(标准命名)就已经不错了,大家知道有这么回事就行了,千万别生搬硬套。

3、构建方式

明细层的模型有的企业是买的,有的企业是自己搞的。不管哪种,这里要尽可能通用、稳定。

还有,这里尽量不做维度退化,除非是非常稳定的维度,不然维度发生了缓慢变化,刷历史数据比较痛苦,如果真的关注历史变化,可以设计拉链表。

明细层还可以细分,比如说一层搞数据清洗、转码,一层搞整合,还有一层刷key并且将最终的数据加载到物理模型表中。之前有大公司这么搞过,但是很少会这么细腻。

4.3 中间层

1、定位

数据预处理,两个原则:

1、 面向下游共性的数据消费需求;
2、 基于绝大部分场景需要用到的维度来进行轻度汇总;

2、实施

1、 横向:

轻度汇总,提前按照特定维度汇总好,下游直接用这批数据来计算

2、 纵向:

预连接,将多表数据连接为一张表,减少下游用数成本,避免重复开发

3、打标签

相同类型的标签只打一次,下游直接用,避免重复开发导致的成本以及逻辑不一致

这里理解为,共性逻辑下沉,只要是有共性需求的,我提前加工好,下游直接拿,尽可能做到:一次加工,重复调用,相同的数据,同一个出口

另外,中间层也是可以细分的,全局通用逻辑的预处理可以搞一层,单个领域的预处理可以搞一层,具体要看企业的业务数据是否复杂。

4.4 集市层

集市(data mart)狭义来讲不属于数仓,而是数仓的应用,是基于某个分析的主题划分的数据集市,如果项目大,就抽到仓外,单独搭建环境,资源独享,如果是小项目,那就大家挤挤(资源是公用的)
分为仓内集市和仓外集市(仓内就是和数仓一套环境),另外数据加工好了之后,可能还要抽到单独某个数据库用来支撑报表展示或者其他的一些应用;

4.5 维度层

主要用来加工维度数据,生成统一的维度表;

现在流行维度建模,主张维度总线矩阵,说白点就是大家调用相同的维度数据,就算错也给错成一样的,所以呢,数仓就单独搞了一个区域用来加工维表。

这部分的定位是这样的:
在这里插入图片描述

五、调用关系

1、 不允许跨层访问(特别是DM)
2、 不允许同层级调用
3、 共性逻辑下沉

六、总结

层是数仓一批对象的集合,共同承担了某部分相同功能。就像流水线上有很多工序,我们会将同类功能的工序划归为某一层,数据在不同的层之间按照规划好的顺序流转。

以上就是数仓分层,不是为了分而分,是为了解耦,为了提速降本,抓住这个核心,我相信你能更好理解分层的意义。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值