深度解析:数仓分层的重要性和实施策略

0 评论 701 浏览 5 收藏 19 分钟

为了提高数据质量、数据可用性及应用价值,我们需要进行数仓分层,那么,怎么理解数仓分层?这篇文章里,作者对数仓分层的重要性、分层原则、实施策略等方面进行了总结,一起来看一下。

一、为什么需要数仓分层

假设将数仓中的表拍平,没有分层概念,只进行简单的数据清洗后直接应用于数据分析,会出现什么问题:

  • 数据复杂性增加:数仓中的数据通常来自不同的源系统,具有不同的结构和语义。如果没有分层,直接将所有表拍平存储,会导致数据复杂性增加,难以理解和维护。分层可以提供逻辑组织和结构化,使数据的使用更加可控和可理解。
  • 数据一致性下降:在没有分层的情况下,数据的清洗和整合过程可能不够严格和完善,容易导致数据的不一致和错误。分层可以在集成层进行统一的数据清洗和转换,确保数据的一致性和准确性。
  • 数据查询效率低下:当所有表都被拍平存储时,数据的访问变得复杂且低效。数据分析需要从大量扁平化的表中提取所需的数据,会增加查询开销和时间。而通过分层结构,可以按需访问和提取数据,提高查询效率。
  • 业务需求定制性差:没有分层的数仓往往无法根据特定业务需求进行定制化的数据提取和分析。不同业务部门或角色的需求各异,如果没有分层,很难满足不同用户对数据的定制化需求。
  • 数据安全隐患:没有分层可能导致缺乏对敏感数据的有效管理和保护。数据仓库中可能包含敏感信息,如个人身份信息等,没有分层会增加数据泄露和滥用的风险。

因此,进行数据仓库分层是为了解决这些问题,提高数据质量、可用性和应用价值。但是也可能存在以下一些不利影响:

  • 增加实现复杂度:数据仓库分层需要额外的设计和实现工作。这可能会增加开发和维护成本,对项目进度产生影响。
  • 增加存储和运行成本:分层会增加数据存储的需求和计算开销,因为每个层级都需要独立的存储和处理。如果底层数据量较大,会占用更多的存储空间和计算资源。
  • 可能会引入额外的复杂性:在设计分层结构时,需要考虑何时使用不同的层级,以及如何确保各层之间的数据一致性。如果没有很好地规划和管理,分层可能会引入更多的复杂性,导致系统难以理解和管理。
  • 数据更新可能产生延迟:在数据更新过程中,由于需要进行转换和加载,数据的传递和同步可能存在延迟。这可能会影响到数据的实时性和准确性。
  • 需要更多的人员和资源参与:分层结构需要更多的人员和资源参与,包括数据架构师、ETL开发人员、数据质量专家、分析师等等。如果企业需要用到多个数据集,这种需求可能会成为一个持续性开销。

二、怎么理解数仓分层

当我们处理大量的数据时,数仓分层可以帮助我们更好地组织和管理这些数据。就像一个图书馆一样,我们把书籍按照不同的类型和主题分到不同的书架上,这样方便我们找到需要的书。

在数仓中,我们也需要对数据进行分类和整理。分层就像是给数据分类,并将其放在不同的存储位置。比如,底层是原始数据,这就相当于图书馆的藏书库房;然后上层是经过清洗和整理后的数据,就像图书馆的阅览室;再往上是加工过的数据,比如计算出的统计数据或者分析结果,就像图书馆的参考书区。

分层的好处是让我们更有效地使用数据。想象一下,如果所有的书都乱七八糟地堆在一起,我们要找一本特定的书会非常困难。但如果我们按照分类放置在不同的书架上,我们只需去对应的书架找就可以了。

同样地,当我们需要特定的数据时,分层让我们能够迅速定位到所需数据的位置。如果我们只需要原始数据,我们就去底层找;如果我们需要经过整理的数据,我们就去上层找;如果我们对数据做更深入的分析,我们就去更高层找。

总之,数仓分层帮助我们更好地组织和管理数据,使我们能够更轻松地找到需要的数据,而不必浪费时间去查找与我们目标无关的数据。这样我们可以更高效地进行数据分析和利用。

三、数仓一般分为哪些层

1. 贴源数据层:ODS(Operational Data Store)

ODS 层是位于原始数据源和数据仓库中间的一个层级。它主要用于接收和存储来自多个源系统的原始操作性数据。ODS 层的数据通常以粒度较细的形式存储,以支持实时或准实时的数据处理需求。数据从 ODS 层可以被抽取到 DWD 层进行进一步的加工和转换。

为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。

落地方法:大多直接用数据同步工具直接抽取过去即可。例如:kettle、DataX、NIFI、阿里DTS、DataPipeline等等。这些工具通常支持增量抽取和全量抽取的方式,并提供数据质量控制和监控的功能。

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

DWD 层位于数据仓库架构的核心位置。它主要用于存储经过清洗、标准化和整合的事实数据和维度数据,以支持多维分析和报表查询等业务需求。DWD 层通常包含企业数据模型(Enterprise Data Model,EDM)或主数据模型(Master Data Model,MDM)的实现。DWD 层中的数据可以按照不同的业务主题进行建模,通过事实表和维度表的关联,构建多维查询和分析模型。

DWD 层的主要特点包括:

  • 面向主题:DWD 层是面向业务主题的,即根据不同的业务领域或主题进行建模。每个主题通常对应一个或多个事实表和一组维度表。
  • 维度建模:DWD 层采用维度建模方法,即将维度属性和事实度量分开建模,以实现灵活的查询和分析。
  • 数据清洗和标准化:DWD 层对数据进行清洗、标准化和去重等处理,以确保数据的质量和一致性。
  • 历史数据保留:DWD 层通常会保留历史数据,以支持时间序列分析和趋势预测等业务需求。
  • 数据集成和处理:DWD 层可以集成来自不同数据源的数据,并进行加工和转换,以满足业务需求。这包括数据抽取、转换和加载(ETL)等过程。

3. 数据中间层:DWM(Data Warehouse Master)

DWM 层是在 DWD 层之上的一个逻辑层级,它主要用于实现业务主题的汇总和聚合。DWM 层的数据通常以更高的粒度或经过预计算的形式存储,以提供更高效的数据查询和分析性能。DWM 层可以根据业务需求进行灵活的数据聚合和汇总,以满足不同层次和角度的数据分析需求。

在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据再放在DWS亦可。

4. 维度层:DIM(Dimension)

DIM 层是独立于事实表的维度信息存储层。它用于存储描述性数据或分类信息,如客户、产品、时间、地点等。DIM 层中的维度表可以与事实表进行关联,以支持多维查询和分析。DIM 层的数据通常比较稳定且经常被查询,可以作为 DWD 和 DWM 层的共享维度表。

5. 数据服务层:DWS(Data Warehouse Service)

DWS 层是位于数据仓库顶层的服务层,它主要用于向上层应用提供数据访问接口和服务。DWS层会基于DWD层上的基础数据整合,汇总,分析成某一主题域的服务数据,一般是宽表。

DWS 层可以提供数据抽取、报表查询、数据可视化、数据挖掘、数据科学模型服务等。DWS 层通常通过提供标准化的数据接口和服务,将数据仓库的功能和价值最大程度地展示给用户和应用系统。

6. 数据应用层:ADS(Application Data Store)

存放数据产品个性化的统计指标,根据明细层、汇总层及维表数据加工生成。

四、数据分层原则

为了提高数据仓库的可维护性、可扩展性和数据一致性,同时也能为分析人员提供更简单、完整、集成的数据,优化数据分析的效率和准确性。数据分层应遵循以下原则:

  • 最小化底层业务变动与上层需求变动的冲击:通过使用自上而下的建设方法,将独立于具体业务系统的通用模型和逻辑引入到基础数据层中。这样,在底层业务系统发生变动时,对上层数据模型和分析过程的影响将被最小化,因为这些变动只需在基础数据层进行相应的调整和维护。
  • 高内聚松耦合:在数据仓库中,主题内部的数据应该高度内聚,即具有明确的业务含义和相关性。同时,各个主题之间的数据应该松耦合,即它们之间的关联应该基于清晰的维度关系而不是直接的表结构依赖。这样可以提高数据模型的灵活性和可扩展性,方便根据需要进行数据调整和变动。
  • 构建仓库基础数据层:基础数据层是数据仓库的核心,负责整合和存储底层业务数据,并为上层应用程序提供统一的数据接口。通过将基础数据层与上层应用开发分离,可以实现并行的大规模仓库开发,并保持仓库层次的清晰性和数据一致性。

五、数仓分层的价值

1. 减少重复建设,提升数据应用效率

数据仓库的不同层次可以根据需要提供不同粒度的数据,这样在开发应用时就不必重复构建相同的数据表。可以节省时间和资源,提高数据应用的效率。

eg:公司有多个部门需要使用相同的销售数据进行报告和分析。

如果没有数据仓库的分层架构,每个部门可能会独立地从原始数据中构建自己的报表和分析表。而有了分层架构,可以在底层的数据层构建一次报表,然后其他部门只需在上层的应用层基础上构建自己的应用表,避免了重复建设。

2. 方便数据血缘追踪

通过分层架构,数据在不同层次间有清晰的关系,当应用层数据出现问题时,我们可以追踪到它所关联的底层数据表,这样可以快速定位问题,避免像查找蜘蛛网一样费时费力。

eg:一个数据科学团队正在分析一家电商公司的用户购买行为数据。他们发现在数据仓库的应用层表中有一些异常数据,需要找到这些异常数据的来源。

通过数据仓库的分层架构,他们可以追溯到底层的原始数据表,查看数据的采集、转换和加载过程,最终可以快速确定异常数据的来源,并快准确决问题。

3. 确保数据一致性和准确性

通过分层架构,数据仓库会对数据进行清洗、整合和汇总,确保数据的一致性和准确性。这样我们就可以放心地使用这些数据进行分析和决策。

eg:企业有多个分销渠道,每个渠道都会收集销售数据并报送给总部。

如果没有数据仓库的分层架构,总部可能会面临来自不同渠道的冲突或重复的数据。有了分层架构,可以在底层的数据层进行数据清洗和整合,确保每个渠道报送的数据经过验证和校准后才进入上层的汇总表或应用表,从而保证了数据的一致性和准确性。

4. 提供更好的性能和响应时间

不同层次的数据仓库可根据需求进行性能调优。底层原始数据层可以容纳大量数据并提供更低的延迟,而上层的汇总层和应用层可以提供更高的性能和更快的查询响应时间。

eg:金融机构需要对大量的交易数据进行实时风险监控和决策支持。

如果使用单一的大型数据表存储所有交易数据,查询可能变得非常耗时。而通过数据仓库的分层架构,可以将原始交易数据存储在底层的数据层,然后在上层的应用层构建针对风险监控和决策支持的汇总表。这样可以提高查询的性能和响应时间,使得风险监控和决策支持能够更加及时有效地进行。

5. 支持多维分析和决策支持

通过分层架构,我们可以进行多维分析、数据挖掘和决策支持。应用层的表提供更高级别和精细化的数据指标和度量标准,帮助我们深入分析数据并做出明智的决策。

eg:零售企业需要分析销售数据以了解不同产品在不同地区和不同时间段的销售情况。

通过数据仓库的分层架构,可以在底层的原始数据层存储每个销售事务的细节,然后在上层的应用层构建多维聚合表,以便进行跨产品、地区和时间的分析。这样企业可以更好地了解销售趋势,优化供应链和销售策略。

6. 提高数据共享和协作

数据仓库的分层结构使得不同团队和部门可以共享数据和结果。不同团队可以基于相同数据建立自己的应用表,方便数据共享和协作,避免了重复工作和独立运营的情况。

eg:医疗机构需要在临床、科研和管理等多个部门之间共享病例数据。

通过数据仓库的分层架构,可以在底层的数据层存储原始病例数据,然后在每个部门的应用层构建特定的分析表。这样不同部门可以共享数据,并且可以根据自己的需求定制应用表,促进部门间的数据共享和协作。

本文由 @数据产品探索家 原创发布于人人都是产品经理,未经授权,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!