00:00
好,各位同学,我们现在正式开始数据仓库项目,呃,本项目最核心的内容就是呃数仓建模,呃,从宏观来看啊,整个数仓是一个分层的模型啊,每一层都有它自己特定的职责啊,那接下来我们就先来整体看一下数仓的分层的结构啊啊。呃,大家现在看到的就是数仓的分层结构,呃,那在这儿我们将整个数仓哎划分了六层,分别是ods DW DD wsd wtdm和ADS。呃,那现在我们先简单看一下每一层的命名啊。呃,看完命名我们再去看每一层的职责啊,我们现在先看第一层,第一层我们称为呃,Ods层啊,那它的全称是operation date store。呃,直译过来其实应该是操作数据层啊,那何为操作数据呢?呃,在这儿我们将业务系统当中所产生的数据啊称为操作数据。
01:02
啊,那由于这一层我们存储的呃,就是从业务系统同步过来的数据,没有做任何的处理,那所以说我们又称之为原始数据啊,原始数据层啊好,那接下来下一个,呃,下一个我们叫做DWD层啊,DWD,那它的全称应该是data warehouse detail啊,那当然过就是数据明细啊,下一层DS,那它的全是dateehousemary,那翻译过来就是数据汇总层啊,下一层DWT啊,那DWT它的全称是data warehouse topic啊,数据主题层啊,那右边还有一层,那它横跨了左边的三层,对吧?啊,那这一层是什么呢?是dim,全称是dimension啊,那当然这个翻译过来就是维度层啊,维度层那再往下最后一层哎,叫做ADS,它的全程是application date,那直译过来就是数据。
02:03
用层啊好,那六层的命名,哎,咱们就看完了,那接下来我们看一下每一层特定的职责是是什么啊好往后看。呃,我们还是先从第一层开始看起,第一层ods层,那它的职责就是存放原始数据啊,保持数据的原貌,不做处理。啊,那它的数据从哪儿来呢?它的数据其实就是从我们的业务系统而来啊,那它存储的就是我们从业务系统同步过来的,呃,日志以及关系型数据库当中的数据。啊,这是ods层啊,总结一下它的作用就是存放原始数据啊好,那下边DWD层,DWD层,那它的这个是什么呢?是保存业务事实明细。啊,那何为业务事实呢?啊,那其实说白了就是,呃,我们的每一个业务操作啊,每一个业务操作我们都叫做一个业务事实啊,例如我们的一次下单,一次退款啊,一次支付,呃,一次支付啊,或者是一次加购物车等等等等,这样的每个业务操作,我们都称之为一个业务事实。
03:18
啊好,那DWD层所存储的就是这些业务事实。啊好,那DWD层的数据它是,呃,从哪来的呀?啊,肯定是从OD层来的啊,那当然我们不能直接将OD层的原始数据D那的,我们需对进行操,那所谓清就是去除空值或者是去除脏数据等等等等这样的一些操作,那所谓的脱敏就是脱除敏感信息的一些操作,啊好,这是DWD层。好,接下来我们看下一层dim,呃,Dim我们称之为维度层啊,对吧,那它所保存的是什么数据呢?就是维度数据。
04:04
啊,这是他的职责啊,那什么叫维度数据呢?啊,其实说白了就是对业务事实的描述信息,哎,这样的数据我们就称之为维度数据啊,其实就是例如何人,何时何地等等等这样的一些描述性信息啊,这是dim层的职责。好,我们看下一层,那下一层呢是DWS层啊,DWS层的职责是什么呢?是以DWD层为基础,对数据按天进行轻度汇总啊,在这儿我们搞清楚两个问题啊,一个是汇总,一个是按天啊,那首先我们先来看汇总啊,那我们要回答是什么问题呢?就是我们汇总的是什么数据。啊,显然我们汇总的应该是DWD层的,呃,业务事实。啊业务事实,那业务事实指的是什么啊,指的就是我们那些业务操作对吧?刚刚提过啊,那什么业务操作呢?比如说下单啊,比如说啊支付,比如说退单,比如说退款啊,那在这儿我们要汇总的这个呃,数据就是这些业务操作啊,那什么要叫做按天汇总呢?其实也很好理解啊,那就是说我们需要将啊每一天的业务事实汇总到一起啊,那举一个简单的例子啊,假如说我们现在要对用户的下单这样的业务事实进行呃按天汇总,哎,那我们得到的结果应该是什么样的呢?
05:28
哎,得到的结果就是,哎,每个用户在每一天啊,我的下单的次数是多少,下单的金额是多少。啊,那同理,对于其他的业务,我们也要进行类似的汇总操作啊好,这就是DS层的职责,那接下来我们再来看DWT层啊DWT层的呢,是以DWS为基础,对数据进行累积汇总。啊,累计汇总跟谁对应,跟上面的按天相对应啊,对吧,那DWT层呃,DWDWS层哎,我们是把每一天的业务事实汇总到一起,对吧?那到了DWT层呢,我们就不再是把每一天的数据汇总到一起了,而什么呢,把最近N天的数据汇总到一起。
06:14
啊,例如最近一天,最近七天,最近30,最近60等等等等,那也就是说在DWT层我们最终得到的结果应该是什么样的呢?举个例子,应该就是每个用户在最近一天的下单次数,下单金额,最近七天的下单次数,下单金额,最近30天的下单次数和下单金额。那当然,哎,其他的业务操作我们也会进行相应的汇总啊,好,这就是DWT层的这个,呃职责啊,好,那接下来我们看最后一层,那最后一层呢是ADS层,那这一层相对来说比较简单啊,它的主要职责就是为数仓后续的应用提供结果啊,例如后边我会有一个报表应用,那ADS呢,就需要为我们的报表提供各个指标的统计结果。
07:05
啊,这就是A层的职责啊,好,那到现在为止,我们就把数据仓库当中的每一层的命名以及其相应的职责介绍完毕了,好,我们看下一个问题啊,那下一个问题呢,是数仓为什么要分层啊,其实也就是数仓分层的意义是什么啊?那其实一共有这样的三个意义,那第一个就是分层能够将复杂问题简单化,第二一个就是呃,能够减少重复开发,那再一个呢,就是能够隔离原始数据,好,那这三个意义呢,我们简单理解一下就可以了啊好,现在先看第一个啊,就是分层能够将复杂问题简单化。啊,咱们举个例子啊,假如说数仓没有分层。啊,没有分层,那现在来了一个十分复杂的需求,那这个需求呢,我们,呃,如果从第一层去查询数据的话呢,呃,我们可能从前到后需要有很多的处理步骤啊,需要很多的处理步骤,那当然这些处理步骤最终对应到我们circle,那其实就是一个一个的子查询。
08:05
啊,那这个大circle我们写出来需要花费相对来说比较长的时间,那再一个如果出了写完之后如果有问题,那我们还得去排查问题,那这个排查的过程其实呃也会比较麻烦,也就是数仓如果不分层啊,其实对于我们这个开发来说呢,是比较麻烦的啊,那数仓如果分层之后,我们就能够将复杂的任务哎,分解成多多步来完成啊,那每一层呢,我只让它去处理一些简单的任务啊,那这样一来呃,我们开发起来就会比较方便,比较明确。那再有一个呢,我们出了问题之后也好也方便去定位啊,这就是诶数仓它的第一数仓分层的第一个意义就是能够将复杂问题简单化啊好,那接下来我们看第二一个啊,它的意义是什么?第二意义是减少重复开发对吧?啊,那在这儿呢,我们还是举一个简单的例子啊,假如数仓没有分层。没分层,那我所有的需求,那是不是都得去第一层查询数据啊,对吧,都去OD啊,大家都知道OD层呢,我们存放的是原始数据,那原始数据呢,肯定会有一些啊这个脏数据对不对?那所以说我们每个需求在最开始的时候都需要先对数据进行一系列的清洗操作,那当然这些清洗操作它的逻辑肯定是相同的,那所以说这时候我们就存在一个问题,就是重复开发的问题。
09:25
啊,那如果输仓我们分层之后,那我们就可以对数据进行统一的清洗啊,然后清洗完之后,把清洗之后的结果放在DWD层啊,那这样一来我们后续所有的需求呢,哎,我们都从DWD啊,以及DWS和DWT里边去取啊,那这样一来我们就能够避免这个重复开发了。啊,是这样的啊好,接下来我们再看第三一个意义就是隔离原始数据啊,那前面也提到过ODI层我们会有一系列的这些呃敏感数据,对吧?比如说用户的手机号,用户的身份证号等等等等啊那如果说我们让呃所有开发人员都从ods取数去做需求的话,那其实存在一定的风险啊,对吧?啊,那现在我们出仓分层之后啊,分层之后我们我们把这个呃所有的这个敏感信息啊,都在这个从ods往DWD同步的过程当中给它哎处理掉对吧?进行脱敏操作啊,那处理掉之后呢,我们后续所有的需求啊,都禁止从ods层取数啊,那这样一来呢,就能够隔离我们这个原始数据了啊,能够去避免咱们这个敏感信息的泄露,这样的一些分风险啊,OK,那这就是我们数仓分层的意义啊,在这儿一共三个啊,再来回顾一下啊,就是复杂问题简单。
10:46
啊,减少重复开发啊,以及隔离原始数据啊,好,那数据仓库分层的概念我们就说完了。
我来说两句