数据中台-数仓分层思想

一、数仓分层思想

1、为什么要分层

  • 通过分层管理来实现分步完成工作,
  • 用空间换时间,通过数据预处理提高效率,提升应用系统的用户体验(效率),简化数据清洗的过程,使每一层处理逻辑变得更简单。
  • 每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性;
  • 当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

宏观抽象来说,数仓分层是一套让我们的数据体系更有序的行之有效的数据组织和管理方法。

2、数仓分层带来如下的好处

  • 数据结构化更清晰

每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。

  • 数据血缘追踪

提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。

  • 增强数据复用能力

减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率。

  • 简化复杂的问题

把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

  • 减少业务的影响

业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。

  • 统一数据口径

通过数据分层,提供统一的数据出口,统一对外输出的数据口径。

3、数仓分层(DW)Data Warehouse

数仓主体层从ODS层中获得的数据按照主题建立各种数据模型。数仓中常见的层级如下:

数据中台-数仓分层思想_第1张图片

3.1、原始数据层(ODS)Operational Data Store

原始数据层,也叫数据基础层,基于阿里巴巴OneData的数仓分层又称数据引入层,又叫贴源层,是用于原始数据在数据平台的落地,存储来自多个业务系统、前端埋点、爬虫获取等的一系列数据源的数据,这些数据从数据结构、数据之间的逻辑关系上都与数据层基本一致,将原始数据几乎无处理地存放在数据仓库系统中,结构上与源系统基本保持一致,是数据仓库的数据准备区。这一层的主要职责是将基础数据进行同步、存储,举个列子:我们可能从几十个业务方把数据拉回来,然后格式化放到HDFS上。但很多时候,情况并不这么简单,虽然有很多的损坏数据、脏数据等是不需要统计的,但是我们需要来看为什么会产生脏数据,这时候原始数据就会提供很好的样板,再有些时候,针对一些流量作弊的数据,如果按照统一规则,很容易就给过滤掉了,然后运营就问过来为什么对方提供的数据与我们的差异这么多大,这时候同样需要去看原始日志。因而,ODS的意义,在于保存最完整的数据现场,便于一些特殊场景下的问题排查使用。表命名规范为:ods_主题_原表名。

3.2、数据明细层(DWD)Data Warehouse Detail

结构和粒度与ods层保持一致,对ods层数据进行清洗,目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,例如字段缺失、格式错误、乱码、空值,去极值(比方取款300亿)、去业务极值、部分数据脱敏、维度退化等即对业务数据传过来的表进行维度退化和降维(如:商品一级二级、省市县、年月日等),等等,在这一层处理好之后,后续的计算便不需要再担心各种各样的异常情况,对于开发效率的提升有着极大的帮助。有些时候还要发挥一些特定作用,因为业务的意外导致各种各样的错误数据进来,也是时有发生的。比如客户消费了,金额总得是正的吧,但如果业务那边产生了一些错误,需要将金额设置成负值,虽然业务那边好处理了,但数据这里就头疼了。所以还需要经常打一些补丁,来处理金额负值这种异常情况。还有各式各样的反作弊要求,也是需要在DWD进行处理的。所以看起来DWD像是多余的一层,但当业务场景足够复杂之后,它所发挥的作用还是很大的。表命名规范为:dwd_主题域_描述,如dwd_driver_detail 司机个人信息表。

3.3、轻度汇总层(DWS)Data Warehouse Summary

当所有的数据都存好了,处理完脏数据之后,下一步我们就需要考虑如何处理和组织统计逻辑了。数据仓库之所以叫数据仓库,正是因为DWS层的重要。数据模型有很多,如:范式模型、维度模型、Data Vault等,但最常用的还是星型模型。通常我们会根据主题来进行表数据的统计,并从ODS层中对用户的行为做一个初步的汇总,抽象出来一些通用的维度:时间、ip、id,并根据这些维度做一些统计值。下面举个列子,例如我们数据层次自上往下分别是:用户、广告投放计划、计划详情,用户本身有行业、主体公司等属性,广告投放计划包括了单元、创意等属性,计划详情包括了投放类型、投放地域等属性。那么我们在这个DWS层,就需要针对所有可能的维度,包括用户、行业、主体公司、广告投放计划、单元、创意、计划详情、投放类型、投放地域做统计,每个类型都尽可能的冗余维度信息,例如用户维度的统计要把行业、主体公司等维度冗余进来,放到一张表里。这么做虽然特别违反三范式的原则,也违反很多模型,但是冗余尽可能多的信息,对于提高下游计算的速度、减少运算数据量、简化业务逻辑、合并计算单元等具有特别大的好处。当然困难也是显而易见的,计算速度慢、数据倾斜等问题也都基本上集中在这个DWS层上。表命名规范为:dws_主题域_描述,如dws_订单_今日下单量。

3.4、数据维度层(DIM)Dimension Data Layer

以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。就是按照维度来决定分析者的角度,如地理位置、时间、数据格式一般是维表,如以国家ID等字段为主键,按需存储,保留历史至今的所有数据。表命名规范为:dim_业务描述,如dim_time,某用户从注册登录后下了多少订单。

3.5、应用数据层(DWS)Application Data Store

面向实际的数据需求,以DWD或者DWS数据为基础,组成的各种统计报表。统计结果最终同步到RDS以供BI或应用系统查询使用

  • 这一层是提供为数据产品使用的结果数据。
  • 在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、MySQL等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 、kill中供数据分析和数据挖掘使用。如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。

你可能感兴趣的:(数据中台,big,data,大数据,hive,hadoop,spark)