一、引言
随着信息技术快速发展,企业数据量也呈爆炸式增长趋势,如何更高效的管理和利用分散在不同系统的数据成为企业决策分析的基础。基于此背景,很多企业开始建设或者买入数据仓库,将其作为企业数据存储、处理、分析的核心平台。
作为B端产品经理,避免不了要和数据仓库打交道,例如:将A系统数据推送到数据仓库、从数据仓库拉数据到B系统、基于数据仓库做可视化大屏等等。所以我们可以不敲代码,但是一定要了解数据仓库的基本概念。
下图是我从网上找到的一张图片,大家先自评一下是否能够看的明白图片中表达的核心思想——分层。对于数据仓库分层,将海量数据有序的组织和存储起来之后,才能对数据进行高性能、低成本、高效率、高质量的使用,这也是本文将要核心探讨的内容。
- 数据仓库分成几层,ODS、DW、ADS、DIM层都是什么含义?
- 数据分层有什么价值?
![](https://img-blog.csdnimg.cn/direct/fa949b122f684accbb0bf49aa9566fd0.png)
二、分层的概念
数据分层是数据仓库设计中的重要环节,良好的分层设计可以使整个数据体系更加易于理解和使用。一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是数据分层。
数据分层的方式并不唯一,但是大体逻辑并无差异,下面给大家唠唠当前较为常见的数仓分层方式,将数据模型分为三层:数据运营层(ODS )、数据仓库层(DW)和数据应用层(ADS)。
![](https://img-blog.csdnimg.cn/direct/405b88ff7b274a08bb256594a5ce43b3.png)
来源:详解数据仓库分层设计
2.1 ODS层
操作数据源层(Operation Data Store) 一般和源数据保持原汁原味,即源数据是怎么样的,ODS层就是怎么样的。
该层主要用于保存原始数据,完成数据积存,通常反映了企业业务系统中的最新操作,同时也是进行数据仓库的基础。一般而言,数据仓库中的ODS层数据结构保持和源系统数据库表结构相同,方便数据的快速存储。
数据来源主要包括3方面:1是业务系统库:公司内的业务应用系统产生的数据,一般分为全量获取和增量获取;2是外部数据:一般为公司外购数据或爬虫获得的数据,将所采集的数据汇总到一起;3是网站埋点数据:收集用户的行为日志,以及一些其他类型的日志型数据。
2.2 DW层
数据仓库层(Data Warehouse) 从ODS层中获取数据,并按照主题建立不同数据模型,DW层又可以细分为 DWD(Data Warehouse Detail)层、DWM(Data WareHouse Middle)层和DWS(Data WareHouse Servce)层。
2.2.1 DWD层
数据明细层(Data Warehouse Detail) 会对ODS层数据进行一定的清洗和主题汇总,包含多个维度和事实表,维度表可以用来描述业务数据的特征,而事实表则包含了关键数据指标(如订单的销量、价格等)。
为了提高DWD层的易用性,该层会采用维度退化的方法,将部分维度退化至事实表中,减少事实表和维度表的关联。例如订单表中的订单ID,量级非常大的维度没有必要采用单独维度表存储,并且后续分析非常重要,所以可以将其冗余到事实表中。
2.2.2 DWM层
数据中间层(Data WareHouse Middle) 在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工,即对通用的核心维度进行聚合操作,算出相应的统计指标。
也有很多分类会去掉DWM层,即将数据指标计算工作融入到DWD或者DWS层里面。但是在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。
2.2.3 DWS层
数据汇总层(Data WareHouse Summary) 又叫数据集市或宽表。该层基于DWD层的基础数据,整合汇总成分析某一个主题域的数据服务层,一般一个主题对应1-3个大宽表,用于提供后续的业务查询,OLAP(Online Analytical Processing)分析、数据分发等。
一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。DWS层中的宽表可以满足特定主题和不同维度的分析需求,减少了对其他表的操作,提升数据分析性能。
2.3 ADS层
数据应用层(Application Data Service) 的主要功能是保存结果数据,为外部系统提供查询接口,基于数据仓库的数据为企业提供增值应用。ADS层一般包括多个宽表,用于支持与企业应用有关的查询、分析、报告、控制、决策等操作。这些宽表一般可以通过BI工具或自定义应用程序查询和访问,以满足企业的各种数据需求。
ADS层通常采用OLAP技术,用于快速访问和查询数据,该层数据面向特定的业务,一般会将数据存放在MySQL、SQL Server、Oracle等数据库中,方便获取和使用。
2.4 DIM层
公共维度层(Dimension) 是为了便于维度表的管理。存储数据仓库中的维度信息,如客户维度、时间维度、地区维度等,用于对仓库内数据从多维度进行分析、建模。
三、分层的意义
由于数据仓库内数据量非常大,如果直接查询数据仓库的原始数据会造成查询速度非常慢,甚至由于超时导致报错。而数据分层就是对原始数据进行归纳处理,在不同层对数据或者指标做不同颗粒度的抽象,便于数据的管理、查询。
虽然看似不同层可能储存相同的数据,实际上每一层里面的数据作用是完全不同的,而分层也对应着以下5个价值点:
- 数据结构清晰。 从ODS层到DW层再到ADS层,不同层存储着不同结构的数据信息并且对应不同的应用场景,无论是数据管理还是技术沟通都更加清晰。
- 屏蔽源头数据。 财务报表等源头系统可能极为繁杂,而且表名、字段名 、字段含义等可能并不符合规范,在数据仓库内容通过DW层处理,可以确保数据规范性,同时屏蔽复杂的源头数据。
- 优化查询性能。 数据仓库中的数据通常需要进行复杂的分析和查询。将数据按照层次结构组织可以优化查询路径,减少数据扫描和查询时间,提高查询性能。
- 数据复用价值。 数据仓库的分层,使得下层包含了上层数据加工所需要的全量数据,这样的加工方式避免了每个数据开发人员都重新从源系统抽取数据进行加工, 减少不必要的数据冗余,也能实现计算结果复用,降低存储和计算成本。
- 数据问题简单化。 将复杂问题分成不同步骤,一来是对问题进行拆解,降低设计和使用难度;二来如果数据出现问题,可以从出现问题的一层进行处理,降低排查和修复难度。
- 增加可拓展性。 当源数据业务逻辑发生变化时,只需要调整ODS的取数逻辑,无需对整个数据仓库进行重构,提高了数据仓库的可拓展性。
四、小结
本文从业务角度对数据仓库以及分层概念进行说明,希望能够对B端产品经理能够有所帮助,如果需要更深层次内容,可以留言沟通。