前言

最近在给公司的大数据项目写操作手册,又不得不涉及到数仓分层的一些专有名词和概念。这次专门整理学习一下,加深理解记忆。

为什么要分层

  • 清晰数据结构:
    每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
  • 数据血缘追踪:
    我们最终给业务呈现的是一张能直接使用的业务表,但它的来源有很多,如果一张来源表出了问题,能够快速准确地定位到问题,并清楚它的危害范围。
  • 复杂问题简单化:
    将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题后,可以不用修复所有数据,可以从有问题的步骤开始修复。
  • 提高数据的复用性:
    规范数据分层,通过的中间层数据,能够极大减少重复计算,增加一次计算结果的复用性。
  • 隔离原始数据:
    不论是数据的异常还是数据的敏感性,使真实数据和统计数据解耦开。

数仓分层结构

  1. ODS层 --(Operational Data Store)-- 原始数据层
    ODS层存放业务系统获取的最原始的数据,是其他上层数据的源数据。
  2. DWD层 --(Data Warehouse Detail)-- 明细数据层
    对ODS层的数据进行清洗转换(去除空值,脏数据和异常数据),数据脱敏(对一些个人信息进行处理,比如电话号码和账户密码)等操作。该层的数据易用性较高,是可以直接给上层使用的。
  3. DWS层 -- (Data Warehouse Service) -- 服务数据层
    把DWD层的数据进行轻度汇总,一般聚集到以用户当日,商品当日的粒度。比如一个商品当日的浏览量,收藏数,评论数等等。
  4. DWT层 -- (Data Warehouse Topic) -- 主题数据层
    把DWS层的数据按主题进行汇总,比如用户一个月的活跃天数,某个商品一个月的成交金额等等。
  5. ADS层 -- (Application Data Store) -- 应用数据层
    面向实际的数据需求,以DWD层、DWS层或DWT层的数据为基础,组成的各种统计报表。

愚见

由于是第一次接触大数据方面的知识,脑补了一个例子来帮助理解记忆,如果存在不准确的地方,还请见谅,欢迎指正。

graph LR A(业务端) -->B(ODS层) B --> C(DWD层) C --> D(DWS层) D --> E(DWT层) E --> F(ADS层)

以网易云音乐举例:
我们每日在使用网易云的时候,都会产生很多数据。比如说你今天听了哪些歌,你喜欢的歌,你创建的歌单,你收藏了哪些歌单等等。这时,数据还保存在网易云的数据库里,也就是业务端。
晚上12点,网抑云时间到了。生而为人……噢不是,新的一天了。意味着昨天的数据记录不会再更改了,你今天听的歌不会算到昨日听歌总时长里。在凌晨这种服务器压力比较小的时间段里,他们会把这一天的数据从业务端采集到ODS层。
这里的数据还不具备可用性,在经过清洗转换等等操作之后,数据来到了DWD层。
DWD层的数据经过轻度汇总,以日为粒度来到DWS层,可以通过一张表就查询出某个用户当天听歌的总时长,最晚听歌时间等等,而不用去庞大的数据库中费力地搜索。
DWT层在DWS层的基础上,汇总出一个月的数据。当然也可以根据业务需求,创建其他的主题。
最后,由ADS层进行报表统计或展示。
到了年末,你的网易云就会推送一份年度使用报告,告诉你今年听了4213首歌,听歌的总时长达到269小时,以及最常听的top10,在9月31日这天,你把《好心分手》循环了12遍。

参考资料

数仓分层
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
电商数仓-(数仓分层概念+数仓理论)

Q.E.D.


The best thing you can do at work hard.