当前位置:   article > 正文

【数仓】数据分层概念以及相关逻辑_数仓分层

数仓分层

一、数仓项目中常见的数据分层

在数仓项目中,常见的数据分层包括以下几种:

1)ODS层(原始数据层)

这一层存放原始数据,通常直接加载原始日志或数据源中的数据,并保持数据的原貌不做处理。它是后续数据处理的基础。

2)DWD层(明细数据层)

该层与ODS层的数据结构和粒度保持一致,但对ODS层的数据进行了清洗,包括去除空值、脏数据和超过极限范围的数据等。有时也被称为DWI层。

3)DWS层(服务数据层)

以DWD层为基础,这一层进行了轻度汇总。通常会聚集到以用户、设备、商家、商品等为主题的粒度,为上层的数据应用提供基础数据。

4)ADS层(数据应用层)

面向实际的数据需求,以DWD或DWS层的数据为基础,组成各种统计报表。统计结果最终会同步到如RDS(关系型数据库服务)中,以供BI(商业智能)工具或应用系统查询使用。

5)DIM层(维度层)

存放用于多个维度的快速查找、分组和排序等的数据。这一层主要用于整理和存储数据仓库中的维度信息。

6)其他层次

根据具体的数仓设计和业务需求,还可能存在其他层次,如标签层(TDM层)、数据集市层(DM层)等。这些层次通常用于特定的数据处理或分析需求,如用户画像、主题分析等。

数据分层的主要目的是将复杂的数据处理过程分解为多个简单的步骤,每一层只处理单一的步骤,使得数据处理更加清晰和易于管理。同时,通过规范数据分层,可以减少重复开发,增加数据复用的可能性,并隔离原始数据与统计数据,确保数据的安全性和准确性。

二、每层数据之间的关系

在数仓项目中,每层数据之间存在着密切的关联关系,这些关联关系确保了数据的流动和转换是有序和可追溯的。以下是每层数据之间常见的关联关系:

1)ODS层与DWD层

  • ODS层存放原始数据,而DWD层是对ODS层数据进行清洗后的明细数据层。
  • DWD层的数据通常是通过ETL过程从ODS层抽取、转换并加载得到的。这意味着DWD层的数据在结构和粒度上应与ODS层保持一致,但排除了空值、脏数据等异常。

2)DWD层与DWS层

  • DWS层是基于DWD层的数据进行轻度汇总后得到的。它通常会按照业务需求,将数据聚合到特定的粒度,如用户、设备、商家或商品等。
  • DWS层的数据是为了支持上层的数据分析和应用而设计的,因此它会根据DWD层的数据进行计算和汇总。

3)DWS层与ADS层

  • ADS层是数据应用层,它面向实际的数据需求,并以DWD层或DWS层的数据为基础来构建各种统计报表和分析结果。
  • ADS层的数据通常是高度汇总的,以满足特定的业务查询和分析需求。这些数据可以直接被BI工具或应用系统所使用。

4)DIM层与其他层

  • DIM层是维度层,它包含了用于数据分析和报表中的维度信息,如时间、地理位置、产品类别等。
  • DIM层的数据被其他各层(如DWS层、ADS层)所引用,用于数据的快速查找、分组和排序等操作。这些维度信息对于理解和解释事实数据至关重要。

5)跨层关联

  • 在实际的数据仓库设计中,可能还存在跨层的关联关系。例如,某些复杂的报表或分析可能直接基于ODS层或DWD层的数据进行,而跳过中间层。
  • 此外,随着数据仓库的演进和业务需求的变化,可能会引入新的数据层或调整现有的数据层结构。

这些关联关系通过ETL过程、数据建模和业务逻辑来实现和维护。确保数据在流动过程中保持一致性、准确性和可追溯性是数据仓库设计的关键目标之一。通过合理的分层设计和清晰的数据流程规范,可以大大提高数据仓库的可用性、可维护性和可扩展性。

三、每层数据的存储方式

在数仓项目中,每层数据的存储方式是根据该层数据的特点和处理需求来决定的。以下是对每层数据存储方式的详细说明:

1)ODS层(原始数据层)

存储方式:通常使用分布式文件系统(如HDFS)或对象存储(如S3)来存储原始数据。

特点

  • 数据保持原貌,不进行清洗和处理。
  • 数据量大,可能需要高效的压缩和存储策略。
  • 数据访问频率较低,但需要有备份和恢复机制。

2)DWD层(明细数据层)

存储方式:通常使用分布式数据仓库(如Hive、Spark SQL)或关系型数据库(如MySQL、PostgreSQL)来存储清洗后的明细数据。

特点

  • 数据经过清洗,去除了空值、脏数据等。
  • 保持与ODS层相似的数据结构和粒度。
  • 需要支持高效的数据查询和转换操作。

3)DWS层(服务数据层)

存储方式:通常使用分布式数据仓库或列式存储数据库(如HBase、ClickHouse)来存储轻度汇总的数据。

特点

  • 数据按照主题进行聚合,如用户、设备、商家等。
  • 需要支持快速的数据聚合和查询操作。
  • 数据结构可能更加复杂,需要优化存储和索引策略。

4)ADS层(数据应用层)

存储方式:通常使用关系型数据库(如MySQL、Oracle)或NoSQL数据库(如MongoDB、Redis)来存储高度汇总的数据和报表结果。

特点

  • 数据面向具体的业务需求和应用场景。
  • 数据量相对较小,但需要高效的查询性能。
  • 可能需要支持实时更新和复杂的数据分析操作。

5)DIM层(维度层)

存储方式:通常使用维度建模技术,在关系型数据库或分布式数据仓库中存储维度数据。

特点

  • 维度数据用于描述业务实体和属性,如时间、地点、产品等。
  • 需要支持快速的数据查找、分组和排序操作。
  • 维度数据相对稳定,更新频率较低。

存储考虑因素

在选择每层数据的存储方式时,需要考虑以下因素:

  • 数据量大小:大数据量需要分布式存储和高效压缩策略。
  • 数据访问频率:频繁访问的数据需要更快的存储和查询性能。
  • 数据更新频率:实时更新需求可能需要使用支持ACID事务的数据库。
  • 查询复杂性:复杂查询可能需要更强大的数据处理和分析能力。
  • 成本和可扩展性:存储和计算资源的成本以及系统的可扩展性也是重要考虑因素。

通过综合考虑这些因素,可以为数仓的每一层选择最合适的存储方式,以实现高效、可靠和成本优化的数据存储和管理。

四、DIM层的数据来自哪里

在数据仓库(数仓)项目中,DIM层,即维度层,主要存储维度数据,这些数据用于描述业务过程中的各种属性或特征。维度数据为数据分析提供了上下文,使得数据更容易理解和解释。

DIM层的数据来源可以多种多样,具体取决于业务需求和数据仓库的设计。一般来说,DIM层的数据可以来自以下几个方面:

  1. 业务系统:直接从企业的各种业务系统中抽取维度数据。这些业务系统可能是CRM(客户关系管理)、ERP(企业资源规划)、财务系统、人力资源系统等。
  2. 外部数据源:企业可能会从外部数据源获取维度数据,如市场研究数据、第三方提供的行业数据等。
  3. 手动输入:某些维度数据可能无法通过自动方式获取,需要手动输入或维护,如某些特定的分类、标签等。

获取DIM层数据的方式通常包括:

  1. ETL工具:使用ETL(提取、转换、加载)工具从源系统抽取数据,进行必要的清洗、转换和格式化,然后加载到DIM层。这是最常见的数据获取方式。
  2. API接口:通过API接口从源系统实时或定期获取数据。这种方式适用于需要实时或近实时数据更新的场景。
  3. 批量导入:对于大量静态或历史数据,可以通过批量导入的方式一次性加载到DIM层。
  4. 数据同步工具:使用数据同步工具保持源系统和DIM层之间的数据一致性。这种工具可以自动检测源系统的数据变化,并将这些变化同步到DIM层。

在实际项目中,可能会根据具体的业务需求和技术环境选择合适的数据来源和获取方式。

五、数据展示层通常读取的是哪里的数据

在数仓中,数据展示通常读取的是数据应用层(ADS层)的数据。数据应用层是面向实际的数据需求的,它以明细数据层(DWD层)或服务数据层(DWS层)的数据为基础,组成各种统计报表。这些统计结果最终会同步到如关系型数据库服务(RDS)中,以供商业智能(BI)工具或应用系统查询使用。

因此,在进行数据展示时,一般会从数据应用层获取已经处理好的、符合展示需求的数据。这样的设计可以确保数据展示的高效性和准确性,同时降低对底层数据的直接访问压力。

六、每层数据间的转换、传输的常见步骤

在数据仓库架构中,每层数据之间的传输和转换通常涉及以下步骤:

1)数据抽取

  • 从源层(如ODS层、DWD层等)中抽取所需的数据。这可以通过使用数据抽取工具、编写SQL查询或自定义脚本来实现。
  • 确定要抽取的数据范围、字段和条件,并确保抽取的数据准确性和完整性。

2)数据清洗和转换

  • 对抽取的数据进行清洗,包括去除重复记录、处理缺失值、纠正错误数据等。
  • 根据目标层(如DWS层、ADS层等)的要求和数据模型,对数据进行转换。这可能涉及数据类型的转换、字段的重新命名、计算新字段等。
  • 应用业务规则和逻辑,对数据进行进一步的加工和处理,以满足特定的业务需求。

3)数据聚合和计算

  • 在某些情况下,需要对数据进行聚合和计算,以生成汇总指标、统计数据或其他高级分析结果。
  • 使用SQL的聚合函数(如SUM、AVG、COUNT等)或分布式计算框架(如Spark SQL)来完成数据的聚合和计算。

4)数据加载

  • 将清洗、转换和聚合后的数据加载到目标层中。加载可以是全量加载(批量替换或追加)或增量加载(仅加载新数据或变化的数据)。
  • 根据目标层的存储特性和性能要求,选择合适的加载策略和工具。

5)任务调度和监控

  • 使用任务调度工具来定时触发数据传输、转换和加载任务,确保数据按照预定的时间表和频率进行处理。
  • 监控任务的执行状态、性能指标等,以便及时发现并解决问题。设置告警机制以在出现异常情况时通知相关人员。

6)数据验证和测试

  • 在将数据加载到目标层之前,进行数据验证和测试,以确保数据的准确性和完整性。这可以通过与源数据进行比对、计算校验和、运行测试查询等方式来实现。
  • 在数据传输和转换过程中,也需要进行单元测试和集成测试,以确保各个步骤的正确性和可靠性。

7)优化和调整

  • 根据数据传输和处理的性能以及业务需求的变化,对传输和转换过程进行优化和调整。这可能包括优化SQL查询、调整任务调度策略、增加资源等。

需要注意的是,具体的数据传输和转换步骤可能因数据仓库的架构、技术栈和业务需求而有所不同。在实际操作中,应根据具体情况进行调整和优化。

1、ODS层数据如何传输到DWD层

在数仓项目中,将ODS层(原始数据层)的数据传输到DWD层(明细数据层)通常涉及数据抽取、转换和加载(ETL)过程。以下是详细步骤和技术:

1)数据抽取

技术:使用数据抽取工具或编写自定义脚本。

步骤

  • 从ODS层的数据源(如分布式文件系统、关系型数据库等)中抽取原始数据。
  • 根据业务需求和数据映射规则,选择需要抽取的数据字段和表。

2)数据转换

技术:使用ETL工具、SQL查询、编程脚本(如Python、Java等)。

步骤

  • 清洗数据,去除空值、脏数据、重复记录等。
  • 根据DWD层的数据模型和业务规则,对数据进行转换和标准化处理。例如,统一日期格式、数据类型转换、字段重命名等。
  • 可能还需要进行数据的合并、拆分、计算等复杂转换操作。

3)数据加载

技术:批量加载工具(如Sqoop、DataX等)、数据库导入导出命令、编程脚本等。

步骤

  • 将转换后的数据加载到DWD层的目标存储中(如分布式数据仓库、关系型数据库等)。
  • 根据目标存储的特点和性能要求,选择合适的加载策略(如批量加载、增量加载等)。

4)调度和监控

技术:调度工具(如Apache Airflow、Apache DolphinScheduler等)、日志监控和告警系统。

步骤

  • 使用调度工具定时触发ETL任务,确保数据的及时性和准确性。
  • 监控ETL任务的执行状态、性能指标等,确保数据传输的稳定性和可靠性。
  • 设置告警机制,对异常情况及时通知相关人员进行处理。

注意事项

  • 在数据传输过程中,需要考虑数据的安全性和隐私保护,采取适当的加密和访问控制措施。
  • 对于大规模数据的传输和处理,需要优化存储和计算资源,提高数据传输的效率和性能。
  • 根据业务需求的变化和技术的发展,及时调整和优化数据传输的策略和方案。

综上所述,将ODS层数据传输到DWD层需要经过抽取、转换和加载等步骤,并使用适当的工具和技术来实现高效、可靠的数据传输过程。

2、DWD层数据如何传输到DWS层

将DWD层(明细数据层)的数据传输到DWS层(服务数据层或汇总数据层)是数据仓库建设中的关键步骤之一。这一过程通常涉及数据的进一步加工、整合和聚合,以满足更高层次的分析和决策需求。以下是传输DWD层数据到DWS层的一般步骤和方法:

1)确定数据传输需求

  • 首先,需要明确DWS层的数据需求,包括需要哪些字段、聚合的粒度(如按日、按月汇总)以及任何特定的业务逻辑或计算规则。

2)数据抽取与整合

  • 从DWD层中抽取需要的数据。这通常涉及使用SQL查询、数据抽取工具或编写自定义脚本。
  • 根据DWS层的需求,对抽取的数据进行整合。这可能包括合并多个数据源的数据、处理数据间的关联关系、以及确保数据的一致性和完整性。

3)数据聚合与计算

  • 对整合后的数据进行聚合计算,如求和、平均、计数等,以生成DWS层所需的汇总指标。
  • 使用SQL的GROUP BY语句或数据仓库提供的聚合函数来完成这一步。对于大规模数据的聚合,可能需要使用分布式计算框架如Spark SQL。

4)数据加载

  • 将聚合后的数据加载到DWS层的目标存储中。这可以是同一个数据仓库的另一个表或分区,也可以是另一个数据存储系统。
  • 根据目标存储的特点和性能要求,选择合适的加载策略,如批量加载或增量加载。

5)任务调度与监控

  • 使用任务调度工具(如Apache Airflow、Apache DolphinScheduler等)来定时触发数据传输和聚合任务。
  • 监控任务的执行状态、性能指标等,确保数据传输的稳定性和可靠性。设置告警机制以便在出现异常情况时及时通知相关人员进行处理。

6)优化与调整

  • 根据数据传输的性能和业务需求的变化,对传输过程进行优化和调整,如优化SQL查询、调整任务调度策略等。

在实际操作中,根据数据仓库的具体架构和技术栈,上述步骤可能会有所不同。但总体来说,将DWD层数据传输到DWS层是一个涉及数据抽取、整合、聚合和加载的复杂过程,需要仔细规划和优化以确保数据的准确性和高效性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/999361
推荐阅读
相关标签
  

闽ICP备14008679号