数据仓库Data warehouse(可简写为DW或者DWH)建设的目的,是为前端查询和分析作为基础,主要应用于OLAP(on-line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。目前行业比较流行:AWS Redshift,Greenplum,Hive等。
数据仓库并不是数据的最终目的地,而是为数据最终的目的地做好准备,这些准备包含:清洗、转义、分类、重组、合并、拆分、统计等。
每个公司可根据自己的业务需求分为不同的层次。目前比较成熟的数据分层:数据运营层ODS、数据仓库层DW、数据应用层ADS(APP)。数据仓库层又可以分为3个层:数据细节层DWD、数据中间层DWM、数据服务层DWS。
一、ODS层
ODS层(Operation Data Store )数据准备区,也称为贴源层。数据源中的数据,经过抽取、洗净、传输,也就是ETL过程之后进入本层。通常包含多个数据源,包括企业内部的各种业务系统、外部的数据供应商、第三方数据服务等。这些数据源通常具有不同的数据格式、结构、语义和质量,因此需要进行一系列的数据处理和转换,以使其能够被有效地集成到数据仓库中。
ODS层的数据处理主要包括以下几个方面:
数据抽取:从各个数据源中抽取数据,包括全量抽取和增量抽取等方式。
数据清洗:对抽取到的数据进行清洗和去重,确保数据的一致性和准确性。
数据集成:将清洗后的数据进行整合和集成,以生成一个一致的、可信的、实时的数据集。
数据同步:将ODS层的数据同步到下一层,即DWD层,以供后续的数据处理和分析。
ODS层的数据模型通常是基于源系统中的数据模型进行设计,其主要目的是将不同的数据源中的数据整合到一个统一的数据集中,并尽量保证数据的质量和可用性。ODS层的数据通常是面向业务过程和业务事件的,包含大量的原始业务数据和事件流数据,可以为企业提供实时的数据集成和分析能力。
ODS层是数据仓库架构中的第一层,主要负责数据集成和整合,将多个数据源中的数据进行清洗、整合和同步,为后续的数据仓库处理提供原始数据。ODS层的数据模型通常是基于源系统中的数据模型进行设计,其主要目的是将不同的数据源中的数据整合到一个统一的数据集中,并尽量保证数据的质量和可用性。
在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是 300 岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一 ID 却有两条重复数据,在接入的时候需要做一步去重)、字段命名规范等一系列操作。
但是为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据也可以,根据业务具体分层的需求来做。
这层的数据是后续数据仓库加工数据的来源。数据来源的方式:
- 业务库
- 经常会使用Sqoop来抽取,例如每天定时抽取一次。Sqoop是Apache旗下的一款开源工具。
- 实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。
- 埋点日志
- 日志一般以文件的形式保存,可以选择用flume定时同步
- 可以用spark streaming或者Flink来实时接入
- kafka也OK
- 消息队列:即来自ActiveMQ、Kafka的数据等。
二、DWD层
数据仓库的DWD层(Data Warehouse Detail Layer)是整个数据仓库架构中的核心层次,也是数据仓库的基础层,它主要用于存储处理过的数据。
DWD层是对原始数据进行清洗、整合、标准化和去重等处理,将数据转化为面向主题的数据集。在DWD层,数据会被按照主题进行建模,即按照不同的业务领域或业务流程进行分类和组织。这种建模方法被称为主题建模,它是数据仓库架构的核心特点之一。
DWD层的主要任务是将原始数据转换成具有较高质量和较高复用性的数据集,使得数据在后续的处理和分析过程中更加容易理解和使用。DWD层的数据一般不包括计算和汇总的结果,而是以最原始的形式存储,这样可以保证数据的完整性和准确性,并支持更灵活的分析和查询操作。
DWD层的数据模型通常以星型模型或雪花模型为主,其中,星型模型包括一个中心的事实表和多个维度表,每个维度表代表一个业务维度,包含相关的属性和描述信息,事实表则包含与这些业务维度相关的度量值;而雪花模型则是在星型模型的基础上,对一些维度表进行进一步的规范化,使得数据更加清晰和精细。
DWD层的数据来源包括多个数据源,例如传感器、设备、应用程序、数据采集系统等等。在ETL过程中,数据会经过多次转换和清洗操作,以保证数据的质量和完整性,例如数据清洗、数据标准化、数据合并、数据分割、数据重构等等。
DWD层是数据仓库架构中最重要的层次之一,它将原始数据转化为具有高质量和高复用性的数据集,为数据分析、查询和应用提供了强有力的支持。
该层是业务层和数据仓库的隔离层,保持和ODS层一样的数据颗粒度;主要是对ODS数据层做一些数据的清洗和规范化的操作,比如去除空数据、脏数据、离群值等。
为了提高数据明细层的易用性,该层通常会才采用一些维度退化方法,将维度退化至事实表中,减少事实表和维表的关联。
数据中间层DWM(可选)
数据中间层:Data Warehouse Middle,DWM
该层是在DWD层的数据基础上,对数据做一些轻微的聚合操作,生成一些列的中间结果表,提升公共指标的复用性,减少重复加工的工作。
简单来说,就是对通用的核心维度进行聚合操作,算出相应的统计指标,例如计算出统计指标:用户访问的次数,时长等
三、DWS层
数据仓库的DWS层(Data Warehouse Service Layer)是数据仓库架构中的一层,它是在DWD层的基础上进一步处理数据,提供更加灵活、高效、可扩展的数据查询和分析服务。
DWS层的主要任务是对DWD层的数据进行加工、聚合、计算和汇总,以满足各种业务需求和分析场景。在DWS层,数据模型以业务应用为中心,根据业务流程和业务需求进行建模,以支持各种复杂的查询和分析操作。
与DWD层相比,DWS层的数据模型更加灵活和多样化,可以采用星型模型、雪花模型、多维模型、标签模型等多种建模方式,以满足各种业务需求和分析场景。此外,DWS层的数据通常是预处理后的聚合数据,包括各种汇总指标、计算结果、模型输出等等,以支持更快速、高效的查询和分析操作。
该层是基于DWM上的基础数据,整合汇总成分析某一个主题域的数据服务层,一般是宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
一般来说,该层的数据表会相对较少;一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。
- 用户行为,轻度聚合DWD
- 主要对ODS/DWD层数据做一些轻度的汇总。
DWS层的数据处理主要包括以下几个方面:
**1.数据加工和清洗:**对DWD层的数据进行进一步加工和清洗,包括数据清洗、数据转换、数据格式化、数据归一化等,以确保数据质量和准确性。
**2.数据聚合和计算:**对DWD层的数据进行聚合和计算,生成各种汇总指标、计算结果和模型输出,以支持各种业务分析和决策需求。
**3.数据存储和管理:**将处理后的数据存储到DWS层的数据库中,并进行管理和维护,以确保数据的安全性、可靠性和可用性。
4.数据访问和服务:提供各种数据查询和分析服务,包括OLAP分析、数据挖掘、报表生成、可视化等,以支持各种业务需求和决策场景。
DWS层是数据仓库架构中重要的一层,它为业务分析和决策提供了强有力的支持,能够提供高效、灵活、可扩展的数据查询和分析服务,为企业的业务决策提供有力的支撑。
四、ADS层
ADS层(Application Data Service Layer)是数据仓库中的最上层,它是基于DWS层数据进行二次加工和业务应用开发的层级。ADS层通常是面向特定的业务场景和业务需求进行建模和开发,提供各种业务分析、报表、可视化和决策支持等服务。
数据应用层, 也有公司把这层叫做APP层、DAL(DATA ACCESS LAYER)层、DM层,DF层,叫法繁多。
面向实际的数据需求,以DWD或者DWS层的数据为基础,组成的各种统计报表。
统计结果最终同步到RDS以供BI或应用系统查询使用。
ADS层的主要任务是将DWS层的数据进行业务化加工和转换,以生成各种针对具体业务需求的洞察和分析结果。此外,ADS层还负责提供各种业务应用和服务,包括数据可视化、报表生成、数据挖掘、预测建模、决策支持等,以支持企业的各种业务需求和决策场景。
该层主要是提供给数据产品和数据分析使用的数据,一般会存放在ES、Redis、PostgreSql等系统中供线上系统使用;也可能存放在hive或者Druid中,供数据分析和数据挖掘使用,比如常用的数据报表就是存在这里的。
与DWS层相比,ADS层的数据模型更加业务化和定制化,通常是基于具体的业务场景和业务需求进行建模和开发,以支持各种复杂的分析和决策操作。在ADS层,数据通常是以应用为中心进行组织和管理,以支持各种复杂的业务场景和分析需求。
ADS层的数据处理主要包括以下几个方面:
1.数据加工和转换:将DWS层的数据进行业务化加工和转换,包括数据清洗、数据抽取、数据加工、数据集成、数据转换等,以满足具体的业务需求和场景。
2.数据建模和开发:基于具体业务需求进行数据建模和开发,包括模型设计、数据架构、应用开发、服务开发等,以支持各种业务分析和决策需求。
3.数据存储和管理:将处理后的数据存储到ADS层的数据库中,并进行管理和维护,以确保数据的安全性、可靠性和可用性。
4.数据分析和服务:提供各种数据分析和服务,包括OLAP分析、数据挖掘、报表生成、可视化等,以支持各种业务需求和决策场景。
ADS层是数据仓库架构中最上层的一层,它是数据仓库的最终输出,能够提供针对具体业务场景和业务需求的各种分析和决策支持。ADS层通过二次加工和业务应用开发,将数据转化为有价值的信息和智能洞察,为企业的业务决策提供有力的支持。
五、DIM层
在数据仓库中,DIM(Dimension)层通常用于存储业务维度信息。维度是指一组具有共同特征的属性,用于描述事实数据。例如,在销售业务中,产品、客户、时间等都可以作为维度来描述销售情况。
在数据仓库中,DIM层通常包含一系列维度表,每个维度表包含了该维度的详细信息。维度表通常包含两种类型的字段:描述性字段和层次字段。描述性字段包含了该维度的详细信息,如名称、描述、编码等;层次字段则用于描述该维度的层次结构,例如时间维度可以按照年、月、日等不同的层次进行划分,产品维度可以按照品类、品牌、型号等不同的层次进行划分。
维度表(Dimension Table)或维表,有时也称查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联,相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。维度表主要是包含两个部分:
- 高基数维度数据:一般是用户资料表、商品资料表类似的资料表,数据量可能是千万级或者上亿级别
- 低基数维度数据:一般是配置表,比如枚举字段对应的中文含义,或者日期维表等;数据量可能就是个位数或者几千几万。
维度表通常采用基于主题建模的模型,如星型模型或雪花模型。在星型模型中,维度表位于中心的星型结构中,与事实表通过外键关联;在雪花模型中,维度表与星型模型类似,但是维度表中的层次字段通常被拆分成多个表,形成类似于雪花的结构。
在数据仓库中,维度表的设计需要考虑以下几个方面:
**1、数据的准确性:**维度表中的数据应该准确、完整、一致。通常可以通过数据清洗、校验等方式来确保数据的质量。
**2、数据的可扩展性:**维度表应该具有可扩展性,能够支持快速地添加新的维度和层次。
**3、数据的性能:**维度表应该具有良好的查询性能,通常可以采用列式存储、分区、索引等方式来优化查询性能。
**4、数据的易用性:**维度表中的字段应该易于使用和理解,通常可以通过命名规范、字段注释等方式来提高数据的易用性。
DIM层在数据仓库中扮演着非常重要的角色,是实现数据分析和BI报表的关键。通过合理的维度设计和维度表建模,可以为数据分析提供更加准确、全面、可靠的基础数据。
事实表 Fact Table
事实表是指存储有事实记录的表,比如系统日志、销售记录等。事实表的记录在不断地增长,比如电商的商品订单表,就是类似的情况,所以事实表的体积通常是远大于其他表。
临时表TMP
每一层的计算都会有很多临时表,专设一个DWTMP层来存储我们数据仓库的临时表
总结
- ODS(Operational Data Store,操作型数据存储)
ODS层是数据仓库体系结构的最底层,主要用于存储从各个操作系统采集来的原始数据。它作为数据仓库的临时区域,经过ETL(抽取、转换、加载)过程后,将数据源中的数据抽取、洗净并传输到ODS层。ODS层的主要功能是为后续的数据仓库层(如DWD层)提供原始数据,同时减少对业务系统的影响。
- DWD(Data Warehouse Detail,数据仓库明细层)
DWD层是数据仓库的明细层,用于存储详细、完整的数据。它支持企业数据的跨部门和跨系统共享和查询,是数据仓库中数据加工和清洗的重要环节。DWD层的数据通常已经过结构化处理,便于后续的汇总和分析。
- DWS(Data Warehouse Summary,数据仓库汇总层)
DWS层是数据仓库的汇总层,用于提供业务汇总分析服务。它对原始数据进行聚合计算和加工,生成汇总数据,供企业决策层使用。DWS层的数据通常是对DWD层数据的进一步加工,便于快速查询和分析。
- ADS(Application Data Service,应用数据服务)
ADS层是数据仓库的应用数据服务层,用于存放数据产品个性化的统计指标数据和报表数据。它是数据仓库的最上层,直接面向业务应用,提供定制化的数据服务,支持企业的决策和业务分析。
ODS、DWD、DWS、ADS是数据仓库分层架构中的关键层次,每一层都有其特定的功能和职责。通过这种分层设计,数据仓库能够实现数据的清晰管理、复杂问题的简化、统一数据口径以及减少重复开发,从而提高数据查询效率,降低成本和复杂度。
