码出个世界

导航

浅谈数据仓库分层

1.什么是“层”?

数据仓库的核心功能是存储数据,所以层就是指一批相似特征表的集合。

2.层包含的内容

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

 ETL:封装好的一组sql代码或者ETL工具的作业(作业也是由sql代码构成),核心就是加工数据;

调度任务:编排ETL任务,将数据正确的加载到目标表;

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

3.分层原因

类似工厂流水线一样,解耦。

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

4.数仓分层

数据运营层(ODS层):ODS存放的是接入的原始数据,以最低的成本最快的速度将数据给弄过来,将多源异构的数据转换成统一格式。

数据源中的数据,经过抽取、洗净、传输,即ETL之后,装入本层。

 

DW层(数据仓库层,又细分为DWD数据明细层、DWM数据中间层、 DWS数据服务层)

数据明细层:DWD (Data Warehouse Detail)

该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。
另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。

数据清洗 :过滤没有价值脏数据(与业务确认规则,数仓实施)

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

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

标准命名

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

数据中间层:DWM (Data WareHouse Middle)

该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。

数据服务层:DWS (Data WareHouse Servce)
又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。

PLUS:数据集市层是什么?

我基于自己的经验和理解,个人觉得数据集市是 为满足某一类数据需求特殊的要求提供的一整套临时解决方案产出的表的合集

我觉得数据集市是相对数仓中间层才有的一个概念。
数仓中间层是数据仓库最有价值,最能提高数据复用度和使用效率的一层。但因为要考虑复用度和开发维护成本,数据对某些具体需求的支持就不够。比如不会有某些使用较少的特殊维度的统计数据,口径经常变化的指标也不会有。

而数据集市,就是为了在不影响数据仓库中间层的复用度和稳定性的情况下,为了某些重要的需求提供的专门的数据支持。
数据集市最优先考虑的是如何更好的满足数据需求,如何更方便的使用,如何更快的提供支持。

一般公司都会有一些新业务,处于摸索阶段。业务流程、产品功能、数据口径经常变化,各处都需要数据来了解现状、查找问题,且对数据的时效性要求非常高。而数仓通常的流程和方式无法支持。
就需要为这些业务单独立项,提供专用的数据集市,满足数据方面的需要。

与数据仓库中间层的差别在于
1.满足需求为第一优先级
2.为了开发成本和产出效率可考虑临时特殊的处理方式
3.流程上更简单快速
4.规范上要求不严格
5.使用上要尽量简单
6.结果数据要尽可能的满足需求,减少再加工的情况
7.集市内的数据不对外开放,仅内部流通
8.对于数据集市中稳定、通用的内容沉淀到数据中间层中,并改为从中间层获取
9.数据集市仅是临时解决方案,一旦项目稳定,应废弃数据集市

我个人认为数据集市是对数据仓库中间层的补充。从开发和使用效率上考虑,某个数据集市不应该长期存在。
因为数仓中间层应该能较好的解决所有的数据需求,某些需求的特殊性也可以在自助报表的数据集层面通过简单的方式,由运营自行处理掉。

而某个业务或部门专用的数据,我认为顶多算数据仓库中间层的一个数据域。

posted on 2022-07-25 20:01  码出个世界  阅读(760)  评论(0编辑  收藏  举报