数据仓库的分层设计是一种重要的数据组织和管理方式,它有助于清晰地定义数据流动和转换的过程,同时也支持数据的可维护性和扩展性,常见的数据分层包括以下几个层次:
一、数据源层(ODS)
- 定义:数据源层,又称为操作数据存储(Operational Data Store)层,是最接近数据源中数据的一层。
- 功能:负责存储原始数据,通常直接加载原始日志或数据源中的数据,并保持数据的原貌不做处理。这些数据源可以包括企业内部的各种业务系统(如ERP、CRM、财务系统等)、外部数据源(如社交媒体、第三方数据提供商等)。
- 存储方式:通常使用分布式文件系统(如HDFS)或对象存储(如S3)来存储原始数据。数据保持原貌,不进行清洗和处理。数据量大,可能需要高效的压缩和存储策略。数据访问频率较低,但需要有备份和恢复机制。
二、数据仓库层(DW)
数据仓库层是数仓项目的核心设计部分,细分为以下子层次:
-
数据明细层(DWD)
- 定义:数据明细层,又称为数据仓库细节(Data Warehouse Detail)层。
- 功能:负责存储经过初步清洗和转换的明细数据。这些数据通常是从ODS层中抽取、转换并加载得到的,保持了与ODS层相似的数据结构和粒度,但排除了空值、脏数据等异常。
- 存储方式:通常使用分布式数据仓库(如Hive、SparkSQL)或关系型数据库(如MySQL、PostgreSQL)来存储清洗后的明细数据。需要支持高效的数据查询和转换操作。
-
数据中间层(DWM)
- 定义:数据中间层,又称为数据仓库基础(Data WareHouse Basis)层或数据仓库中间(Data WareHouse Middle)层。
- 功能:在DWD层的数据基础上,对数据进行轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。
- 存储方式:通常使用分布式数据仓库或列式存储数据库(如HBase、ClickHouse)来存储轻度汇总的数据。数据按照主题进行聚合,如用户、设备、商家等。需要支持快速的数据聚合和查询操作,数据结构可能更加复杂,需要优化存储和索引策略。
-
数据服务层(DWS)
- 定义:数据服务层,又称为数据集市(Data WareHouse Servce)层或宽表层。
- 功能:按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询、OLAP分析、数据分发等。在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。
- 存储方式:通常使用关系型数据库(如MySQL、Oracle)或NoSQL数据库(如MongoDB、Redis)来存储高度汇总的数据和报表结果。数据面向具体的业务需求和应用场景,数据量相对较小,但需要高效的查询性能,可能需要支持实时更新和复杂的数据分析操作。
三、数据应用层(APP)
- 定义:数据应用层是面向实际的数据需求的一层。
- 功能:主要提供给数据产品和数据分析使用的数据,一般会存放在ES、PostgreSQL、Redis等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。这一层的数据通常是高度汇总的,以满足特定的业务查询和分析需求,这些数据可以直接被BI工具或应用系统所使用。
- 存储方式:通常使用关系型数据库(如MySQL、Oracle)或NoSQL数据库(如MongoDB、Redis)来存储高度汇总的数据和报表结果。数据面向具体的业务需求和应用场景,数据量相对较小,但需要高效的查询性能,可能需要支持实时更新和复杂的数据分析操作。
四、其他可能的层次
除了上述常见的层次外,根据具体的数仓设计和业务需求,还可能存在其他层次,如:
- 标签层(TDM层):用于存储和管理用户标签数据,支持用户画像和精准营销等应用场景。
- 数据集市层(DM层):针对特定业务需求或部门的数据集市,提供定制化的数据服务。
- 维度层(DIM层):专门用于存储维度数据的部分,这些维度数据通常用于构建多维数据模型,以支持在线分析处理(OLAP)和数据挖掘。维度层的设计对于实现高效的数据查询和分析至关重要。
综上所述,常见的数据分层包括数据源层、数据仓库层(包括数据明细层、数据中间层和数据服务层)以及数据应用层。这些层次共同构成了一个完整的数据处理链条,支持企业高效、灵活地管理和利用数据。