数据仓库-数仓分层建设

时间:2024-10-14 07:05:32

数仓分层设计的作用

支持数据的重用

通过在数据仓库中创建可重用的数据模型,可以减少数据的重复处理,提高数据的处理效率。

优化性能

通过在数据仓库的不同层次上进行数据聚合和汇总,可以提高查询性能,尤其是在面对大量数据时。

提高数据的一致性

通过在数据仓库中间层(如ODS层,操作数据存储层)确保数据的一致性,可以减少数据冗余和错误。

提高数据的可维护性

通过分层,可以容易地对数据进行维护和更新。每一层的数据都具有特定的用途和结构,这使得数据的管理和维护变得更加简单。

支持数据的可拓展性

随着业务的发展,数据量和复杂性可能会增加。分层设计可以更容易地扩展数据仓库,以适应不断变化的需求。

提高数据的可理解性

分层可以帮助用户更好地理解数据的结构和用途。每一层的数据都有明确的定义和目的,这有助于用户快速找到他们需要的数据。

提高数据处理的灵活性

分层设计允许数据在不同的层次上进行处理和分析。例如,可以在数据仓库的底层进行数据的清洗和转换,而在上层进行更复杂的分析和报告。

支持数据的完全性和权限管理

分层设计可以更容易地实现数据的安全性和权限管理。例如,敏感数据可以在较低的层次上进行处理,而只将汇总数据暴露给最终用户。

支持数据的审计和合规性

分层设计可以帮助企业遵守数据审计和合规性要求,因为每一层的数据都可以被单独监控和审计。

数仓各层建设思路

数据引入层 ODS(Operational Data Store)

结构与源系统保持一致的增量或者全量数据。作为DW数据的一个数据准备区,同时又承担基础数据的记录历史变化,之所以保留原始数据和源系统数据保持一致,方便后期数据核对需要。

数据明细层 DWD(Data Warehouse Detail)

对ODS层数据进行清洗转化,以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细事实表。可以结合企业的数据使用特点,基于维度建模思想,将明细事实表的某些重要属性字段做适当冗余,也即宽表化处理,构建明细宽表。

选择业务过程,声明粒度,确认维度,确定事实,关联维度,数据清洗和转换,数据存储策略,性能优化,命名规范,数据模型选择

汇总数据层 DWS (Data Warehouse Summary)

基于指标需求,构建初步汇总事实表,一般是宽表。基于上层的应用和产品的指标需求,构建公共粒度的汇总指标表。以宽表化手段物理化模型,构建命名规范、口径一致的统计指标,为上层提供公共指标。

公共维度层 DIM(Dimension)

建立一致数据分析维表,可以降低数据计算口径不统一的风险,同时可以方便进行交叉探查。以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性、关联维度等定义计算逻辑,完成属性定义的过程并建立一致的数据分析维表。

应用数据服务层 ADS (Application Data Service)

整合汇总成分析某一个主题域的服务数据,面向应用逻辑的数据加工。该层主要存放数据产品个性化的统计指标数据,这一层的数据直接对接数据的消费者,是产品、运营等角色可以直接感知理解的一层,大多数这一层的表都可以直接在BI上通过图表的形式直接透出。

DWS层一定需要建设吗?

当我们在做数据需求时,会不会有这样的疑问,我直接能从DWD层很方便的取出想要的数据,为什么还要多此一举建立DWS层的汇总表呢?那是不是意味着可以不用建立DWS层的表呢。答案是可以的。但是这有一个前提,就是业务场景不复杂。从短期来看可以快速满足数据需求的开发,但是长期来看,会存在如下的问题:

  • 对于复杂的业务场景而言,会出现很多跨域、跨事实的交叉探查,如果没有沉淀出DWS层的指标进行统一口径的收口,那么相同的指标会出现不同的口径和命名,其后果就是取数变得越来越不方便,而且容易造成业务怀疑数据是否正确的尴尬局面。
  • 公共指标没有统一计算,当每次需要相同的指标时,则需要重新计算一遍取数逻辑,不仅效率不高(需要关联表,指标计算),而且造成计算资源浪费。

还有一种情况我认为可以延迟DWS层的建设,当对源系统数据了解不足或需求变动频繁时。因为项目初期需求频繁变更时,会产生较高DWS层维护成本。所以等对数据或需求有整体把控时,陆续沉淀DWS层模型也不失为一种方案。