00:00
来,我们现在看这个第一个第一章,我还是先打开一个PPT啊。来看数仓的分层这一个PPT啊来这个标题呢,叫做为什么要分层是吧?啊,这个分层为什么要分层,呃,这个问题一会再解答啊,我们现在呢,先看一看咱们出仓这个层是怎么分的啊来来一起看一下啊。这边就是咱们这个数仓的五层啊,这里边呢,咱们也可以看到啊,看到什么看到这儿呢,有一个小三角,这个小三角呢,其实不是说这个为了美观啊,这个其实是有特殊的含义的啊,这边指来的是啥呀,其实指的是数据量啊呃,这个咱们是从上到下啊,这是第一层,这第二层,这是最后一层,哎,你会发现啊,从第一层开始到最后,这个数据量越来越少,对不对啊,为什么会越来越少啊。为什么要越来越少啊?是是一直筛选一直过滤吗?啊,其实并不是你想你筛选你过滤,那能少多少啊对不对,我100万条数据,你过滤掉1万条,那我还有99万呢,对不对,你不会少太多,对不对,那咱这儿这个数据为什么会变少呢?给大家解释一下啊,实际上我们实际上所所谓的这个数据分析,数据分析啊,那肯定都是什么,都是以大量的这个数据为基础,然后对这个数据进行什么。
01:24
进行啊这个呃,汇总啊,进行汇总啊,肯定都是一些汇总啊,对不对,或者叫做聚合运算啊,对不对,那肯定都是这个啊,肯定都是这个,所以说那随着我们这个层数的这个增长,就是越越往后,那我们这个数据,数据的汇总程度呢,会越来越高啊是这样的,也就是说我们其实做的一些指标啊,一些指标,那都是一些汇总指标。啊,汇总指标,当然了,咱们这儿说的是这种,就是普通的这种汇总指标,那数据肯定是越来越少,但是如果说你要做的是其他的一些工作啊,比如说我要做的是。啊,什么这个继续学习啊,那数据挖掘呀,对不对,那那相当于嗯,他那个数他所需要的数据,那可就不是说只是一个这种汇总结果了,对吧,那他应该需要的是什么呀,是不是也需要的是大量的这个明细数据啊,对不对,那包括做什么用户画像啊等等等这些东西,我所需的也是大量的用户信息。
02:19
是这样的啊,你得看你这个数据仓库后续的应用是什么啊,那咱们这这个其实针对于谁写的呀,是针对于这个报表啊,针对报表啊,因为我做这种报表的话,那肯定都是一些最终的一些聚合值对吧?啊,都是一聚合值啊,都是一聚合值,那所以说既然是聚合值,那你这个数据量呢,肯定是会越来越小的啊OK,咱们先把这一点明确啊,就是因为我们这儿做的这个指标更多的都是一些聚合运算,所以数据量会越来越少啊,过滤不会过滤到太多的啊。好,先先把这点明确,然后接下来我们来逐一的去看一下我们这个数仓里边这个每层啊是什么样的,我们先来先看名字吧,啊,咱们一直ODSDD对吧,这个先看这个名字到底怎么来的啊,先看第一个ods,它其实是三个英文单词的首字母operation date store啊,或者有同学可能会觉得这个叫什么呀,叫做operational,这个date store operation是不是就是原始的意思啊,对不对,但其实这边呢,它其实确实就是operation date store啊,那当然它翻译成是不是就翻译成原始数据层了啊,给大家解释一下啊,为什么呃,叫做operation date store operation是什么意思,是操作的意思,对吧,这个data就是就是数据啊,操作数据层啊,然后有那翻译成了原始数据层,这个怎么来的啊?
03:38
是这样的,大家想一想,你说我ods层的数据,我从哪来?一层的数据从哪来?肯定是从咱们存储数据的那个HDFS的路径而来吧,对,因为我们现在已经把数据,甭管日志还是业务数据都在HDFS,那个original data是不是在那个路径里边啊,对不对,那所以说第一层的数据肯定从那个路径而来。
04:03
啊,那我问大家一下啊,我现在要把HDFS上的一个路径下面的文件导到have的一张表里,你说我应该通过哪种方式往这张表里写数据啊?咱们往一张表里写数据的方式有有有什么呀。Load insert对不对,那咱们这只能用谁?只能用load呀,是不是只能用漏,因为我从文件到一张表,那咱们是不是肯定是只能是load呀,啊只能是漏啊,那既然是漏的话,那大家知道load它底层实际上是做的什么操作吗?漏。Have里边不是load什么这个data,然后这个pass,然后印图一张表对不对,是不是有这样的操作呀,这个load底层做的是啥呀。大家都知道会把这张数据加载到一张表里,但底层就做傻事了。其实。就是把文件相当于是移动到了那个害物表所在的这个路径下边。
05:03
啊,对不对,因为你在建一张表的时候,是不是可以指定一个路径啊,就是不指定也有一个默认的路径,对不对,有一张表肯定有一个路径啊,那你把这个路径下的文件漏到这张表,就相当于怎么做把这个路径下的文件移到了,注意是移或者叫做剪切到了你have表所在的路径啊,那这儿一再强调这个移动或者剪切相当于什么呀?你漏完之后,原来路径还有这个数据吗?没了啊,是这样的,这个得明确啊,好,那既然我们是移动来的,而且移动没有做任何的操作,这个文件内容还是原来那个内容,对不对?那所以说ods层它底层的数据就是啥。就是你传进来的那那样的啊,也是原始数据呗,啊就是原始数据啊,那这个原始数据它为什么要叫做什么这个操作数据呢?啊,其实也很好理解啊,咱们那个原始数据怎么生成的呀。从哪是不是从咱们业务系统生成的呀,对不对,那业务系统咱们甭管是业务数据还是日志数据,那都是怎么生成,都是我们用户在客户端是不是有一定的操作之后,才会在咱们的这个,呃买CQ也好,在咱们的日志服务器里边是不是才会生成数据啊,所以说咱们管它叫操作数据也是说得通的啊,就这个意思啊,好,那也就是说ods层我存储的就是原始数据啊好,这是ods啊。
06:23
然后下边看DW这个名字怎么来的啊。DWD呢,它的这个,呃,也是三个首单词的首字母,那叫做date warehouse detail啊,其实你往下看啊,这个是不是叫DWS,这个叫DWT,对这个DW都是啥意思,都是data头L号都是数仓的意思,也就其实你看名字就能看出来啊,咱这个数仓我们的主体就是是不是这三层啊,这就是咱们说的主体啊,主体其实相当于ods层,这儿就是起到了一个什么作用啊,大家觉得。呃,其实就是起到了一个相当于一个过渡的作用,对不对,因为我have,我我要想把这个文件转成表,那我是不是必须得有一个表去干啥呀?啊,必须要有点去,就是先去接收一下这个数据,对吧?啊,得缓冲一下,然后呢,我才能写circleq去分析这个数据啊ODI层相当于做一个这个缓冲或者一过渡的一个作用啊好,那咱们先来接着说咱们这个主体啊DWD,那DWD呢,它这个后边这个D指的是什么?是detail detail什么意思啊,Detail就是明细的意思啊,明细的意思啊,那在这边呢,也就是DWD层,我存储的是数据的明细啊,明细。
07:35
啊,什么叫明细数据啊,什么叫明细。其实明细这个词呢,是跟另外一个词是对应的啊,跟谁是对应的呀,明细和汇总啊,明细数据跟汇总数据他们俩是对应的啊,什么叫明细数据啊,明细就是最原始最详细的数据。啊,这就是明细数据啊,那举个例子啊,举什么例子,比如说咱们以那个订单,以订单表为例吧,Order info为例,Order in例,那order in,那你说它的明细数径啊,就是啥呀,是不是就是一行啥呀。
08:12
数据是不是应该指代最明细的一个操作对不对,就是啥就是下单啊,就一行数据一个订单,一行数据一个订单,那对于支付来说呢。啊,那就是一行数据,就是最原始的一个下单记录,对订单,呃,那个支付记录对吧,那所以说诶,这都叫明细数据啊,就是你里边啊存储的是最细致的啊,最原始的那个数据啊,就是可以这么去说啊,怎么说呀,就是我里边的一行数据,其实我只带的是一次业务行为。啊,一个订单,订单表里边一行数据是不是就是一次下单,那支付表一行数就是一次支付啊,这叫明细,什么叫汇总呢。什么叫汇总呢?比如说统计一下我今天这个总的下单金额,统计一下今天总的这个支付金额,那你是不是相当于会把这么多的订单数据,单的明细数据是不是得汇总到一起啊。
09:05
对不对,那也是你一行数据实际上是由多条明细数据聚合汇总而来,那这样的数据呢,咱们就叫做汇总数据,其实就这个概念啊,那咱们DWD存的是什么呢?存的是明细数据,而且是最明细的数据啊,最明细的最明细就是已经不能再往细里划分了,它已经是最最原始最那个细的数据了啊,不能再细了啊啊。咋了,又是不是又让那个触到了某个同学的这个伤心点,来咱们往下走啊,来看一下这个DWS啊,往下走DWD完之后呢,是DWS啊,那DWS呢是怎怎么理解啊,咱们其实这两层啊,咱们可以一起说啊,DWS和DWT呢,咱们在那呢可以一起说啊,大家要注要知道啊,这两层数据咱们都是什么数据啊,都是汇总数据啊,就是DWD,我存的是明细,DWSDWT呢,咱们存的是汇总。
10:11
啊是汇总,那当然你汇总是从哪儿来的呀,是不是肯定从DWD而来,你那从明细是不是汇汇总到这个所谓的汇总数据啊,啊明细聚合到汇总数据啊,啊DWS呢,它这个名称是怎么来DWS,然后呢叫做什么service,就是服务层啊,那服务于谁呀。服于谁,肯定是服务于我们后续的需求呗,对不对啊,所以叫服务层啊,那OK,那下面呢,这有一个WT啊DWTDWT呢,咱们这个T指的是topic,那这块呢,划分了这个相应的主题啊,方案的主题,那比如说用户主题,比如说订单主的这个商品主题啊,比如说什么这个活动主题等等等等啊,会有这个主题的划分。啊好,那这个名字在这儿呢,不重要,诶它怎么出来了,名字在这不重要,咱们在这主要说的是什么呢?主要说的是哎,这两层里边的数据是汇总数据啊,接下来看最后一个ADS层了,ADS层呢,在这儿它相对比较简单,它叫数据应用层啊,这个应用指的什么应用,指的什么应用啊。
11:13
只是数据仓库后边的应用对吧?呃,咱们一再强调书仓后边还会有应用的啊,有报表啊,有机学习有什么用,画像啊,有其他的一些数据挖掘等等,是不是有这些东西啊,那这些东西他是不是肯定需要数仓给他提供数据啊,对不对?那咱们这儿的这个数仓它的一个逻辑是什么样的呢?来我从最原始的数据我开始处理啊,那你后续你有什么应用?那我就给你处理成你想要的那个样子,比如说报表,那报表我就需要什么样的数据啊。报表我就需要啥,我就需要最终的这个结果对不对,那所以说你就一步一步的聚合,那得到你想要的结果就完事了啊,那再比如说,比如说我这我我需要做用户画像,那用户画像你需要什么样的数据呢?我需要对每个用户去打各种各样的标签,对不对?OK,你需要把打好标签的数据给我提供好。
12:05
啊,那假如说我现在呢,要去做一些这种呃,什么这个机器学习或者数据挖掘啊,那你做机器学习呢,我可能需要对呃数据呢,也是需要一些明细数据啊,然后呢,需要有一些什么这个呃,也是需要一些这什么这个验证结果什么的啊等等等,这个当然得看你那个继续学习的种类的啊,什么监督学习,什么这个非监督学习的等等等等这些东西啊,也就是他需要什么类型的数据,总之就是他需要什么,你得给他准备好什么,在哪一层准备呢?在ADS层准备。啊,那你给他准备好,那是不是我后续这些开发人员他就省心了呀,我直接从ADS层去拿我想要的就行了啊,我就不用再自己去处理这个原始数据了啊,是这样的啊,这是ADS它的这个作用。啊,当然在这儿呢,咱们这个后续的应用相对来说比较简单,咱们只有一个报表,那所以说我们这儿呢,就是为各种统计报表提供数据啊,是这么一个,呃,一个结构啊,那咱们这个五层啊,这个至少咱这个名字就已经清楚了,对吧?啊然后接下来呢,我们再去详细的说一下每一层它具体干什么事啊来先看第一层ods。
13:13
下次咱们叫原始数据层啊,这边说的是存放原始数据,存放原始数据啊,然后那咱们这个怎么处理呢,怎么处理啊。啊,怎么处理,直直接从那个HM那个路径是不是漏进来就行了啊,也是直接加载原始日志和业务数据,数据保持原貌不做处理啊,你也没法处理,因为你漏的话是不是不做任何操作呀,啊是这样的啊好,那这点咱们明确,那接下来咱们往下看啊,下面呢是DWD层,DWD层呢其实是我们这个,呃,就是在数仓里边呢,是比较关键的一层。啊,DWD比较关键的一层啊,叫做明细层啊,为什么它比较关键呢?它相当于是你这个整个数仓的一个基础。啊,相对你那个一一栋大楼的一个地基啊,如果说你地基打不好,那你上边那个肯定也是不稳的,对吧?啊到时候这个DWD呢,因为是比较重要的一层啊,那这一层呢,我们主要做哪些工作呢?来看一下啊。
14:12
来,那咱们其实呃光看这个这句话呢,其实总结的也不是太好啊,那咱们来说一下这句话,这这个DW层主要干什么啊,那干什么咱们得分两部分去说啊,因为我们ods层咱们的原始数据我们有两类对吧,一类是日志啊,那一类是咱们业务数据对吧?那这两类数据它是有有有区别的啊,那对于业务数据来说,它本身来自于关系型数据库对吧,那所以说它它来的时候就是什么样的。就是结构化的对不对,因为我导上来之后,我相当于是那种就是以具体的一个分隔符分隔的文件,对吧,我可以直接加载到have表当中,是不是你进去之后就是一个一个的字段呀,对不对,那所以说对于他来说呢,相对来说比较容易,它本身就是结构化,但是对于日志来说呢,那就不行了,日志我们现在还是一行一行的啥呀。
15:01
一行一行的字符串对吧,对不对,那这个东西你是没有办法直接就是解析成一个一个字段的,那所以说这边他既然是这样的,那我们就得是不是多做一步啊,对不对,咱们得想办法把这样的这个哎字符串得给他解析成一个一个的具体的字段。是这样的啊,那也就是说,那什么时候解析呢?在哪解析啊,就在我们从ods往DWD层导的时候啊,去给它进行解析,那所以说咱这儿呢,得分两部分去说啊日志,我们的主要工作就是对日志进行解析。啊,解析的时候咱们需要考虑一些问题啊,就是比如说啊,我解析成几张表啊,啊,那我按照什么逻辑去解析啊,对不对,那这些嗯都需要咱们去考虑,那我定下这个逻辑之后,那我这个解析的思我应该怎么写呀?啊这都是咱们后续要考虑的问题的啊那现在咱们先明确这一点就行了,这是从哪儿做的呀?从ods往DWD导的时候做的。啊啊,完了之后呢,那这个业务数据咱们这干什么呢?啊,业务数据呢,在这儿我们需要进行数据仓库的建模啊,需要进行建模啊,那咱们提到这个建模这个概念了啊,其实所谓的建模啊,大家可能听着比较高大上对吧,那其实你建模落地就是在干啥,落地之后就是做做点什么事啊其实。
16:21
所谓的建模就干啥,以数据库为例啊,就干啥呀。所以建模其实说白了就是你得明确你要建哪些表。啊,然后呢,你要明确每张表当中有什么样的字段。所谓的建模是不是就是在干这个事啊,这就是数据仓库的建模,然后呢,还有一点就是啊,得明确啊,就是表与表之间啊,有什么样的关联啊,这你你把这些东西都确定好了,那你这个数据的模型是不是就出来了呀,对吧,就是这就是所谓的建模啊,只不过就是建模的时候呢,咱们是有一些指导思想的啊,那建模咱们比如说有呃,什么维度建模啊,有关系建模啊,那这都是咱们建模的这个思想,相当于是啊,在这儿呢,我们采用的建模的这个思想是什么呢?是维度建模啊,数仓里边啊,我们一般情况下都采用维度建模。
17:09
啊,那在这儿我们什么时候建模呢?就是从ots往EWD层导的时候,咱们会进行维度建模啊。这是我们对业务数据的这个处理啊,这是我们所做的核心工作啊,来重新总结一下啊,日志我们主要目的就是解析,那对于业务数据呢,我们主要进行维度监控啊,维度建模好,那当然呢,这个文档上,呃,这个文档这呢,主要是给咱们列出来了一些,就是咱们一些通用的这个处理啊,那这个在我们进行建模,进行解析的过程当中,我们需要做做哪些工作呀,顺带着咱们需要对数据呢,进行哎清洗,因为ods层刚才说的是原始数据,对吧,你数据当中呢,可能有一些这个就是不符合规范的数据啊,有一些这个比如说就是残缺不全的数据,那这样的数据呢,咱们啊就给它过滤掉就行了,咱们以免影响咱们后续的分析嘛,啊,所以说需要做一些这个清洗,那清洗的时候呢,有一些清洗的逻辑,比如去去空值,去脏数据,去那些超过极限范围的数据等等等,啊是这样,这是所谓的数据清洗啊,完了之后呢,还有一个叫做脱敏。
18:17
呃,这个脱敏怎么理解啊,脱敏其实就是去脱除敏感信息啊,那这个其实咱们这个没做过,但是我们应该接触过啊,你想啊,我们在呃业务数据当中啊,咱是不是有那些用户信息呀,对吧?那用户信息里边是不是有一些什么这个用户的手机号,或者是用户的这个身份证号,这是不是都是个人信息呀,对吧?那这个人信息我正常的情况下呀,我们放到数仓之后啊,我们需要对他进行这个脱敏处理,就是把这些敏感信息咱们得处理一下啊,为什么呀。啊,因为如果不处理的话呢,咱们这个数据如果说你的权限管理做的不好,是有可能会有这种泄露的风险,对吧,可能某个员工啊,他这个对吧,这个这个走歪门邪道,把这个数据拿出去对吧,可以换点钱是吧?啊那当然呢,呃,这种情况也比较少啊,比较少,但是咱们为了防止这种情况的发生,那所以说我们就需要对这个敏感数据进行处理,其实对处理的方式也很简单啊,怎么做就行了呀。
19:14
比如手机号,那我就把这个中间四位给它变成星号对不对,你的身份证号,那身份证号一般情况就是最后最后几位是比较重要的对吧?哎,把最后几位我给他打一个这个信号,哎,就完事了啊是这样的啊,这就是我们去哎这个脱敏的这个工作其实很简单,自己这个写个circle,用一个函数是不是就能搞定啊很简单啊啊这是脱敏啊好,那这就是我们把呃ods层数据导到DWD的过程当中,咱们需要去做的事啊,日志进行啊,解析业务数据,进行维度建模啊,然后呢,对所有的数据呢,都需要呃去进行一些过滤和脱敏的操作啊啊那完之后呢,看下边啊,那DWD最终你做了这么多的处理,对吧?又建模又解析,最终你里边的数据是什么样的呢?哎,是明细数据。
20:02
啊是明细数据,你得保证你的一行数据,它所指代的呢,是一次具体的操作是一次而不是多次,而不是多次啊,啊这个得明确啊,比如说一行数据代表一次业务行为,例如一次下单啊,就是一次下单,一行数据就这个意思啊啊咱把这点搞清楚啊,明细数据。行,那接下来看下边这两层,一个DWS,一个WLT,那前面讲了这两层呢,我们都是干啥呀?是不是都是存储的汇总数据对不对?那既然都是汇总数据,我为什么还要分两层呢?啊,我就在一层里边,从汇总数据不就完事了吗?对不对?来看一下为什么要分两层。就是为什么分了两层,是因为啊。咱们这两层的数据啊,汇总程度不同啊,因为我汇总我可可以汇总到不同的程度,对吧?啊,我可以先稍微的汇总一下,然后呢,再把大批的数据再汇总一下,那这样一来是不是这个汇总程度是不一样的呀,对不对啊,有的汇总的比较轻,有的汇总的比较重,比较厉害啊,那所以说我们这个按照汇总程度呢,咱们在这呢,又分了一个层啊,那DWD呢,咱们DWS呢,咱们是按什么汇总的呀,可以看一下啊。
21:15
来看一下,它是按照它是以DWD为基础的,对不对啊,按天进行汇总。按天汇总啊,按天汇总相当于什么样来看一下啊,就是一行数据啊,它所代表的是一个主题对象一天的汇总行为。啊,这句话呢,呃,咱们好好理解一下啊,就是一行数据代表的是一个主题对象,那首先我们得明确啊,主题对象是什么意思。所谓主题对象是什么意思啊,因为咱们数字仓是会划分主题的到后边啊,那比如说我有用户主题,有会员主,有这个什么商品主题啊,有活动主题,有地区主题,这是不是都是不同的主题呀,对吧?啊,那不同的主题就有不同的主题对象,那以谁啊,咱们比如说以用户主题为例,那你说一行数,那你的一个主题对象就是一个啥呀,就是一个用户呗,啊,那我地区主题呢?
22:11
哎,对,就是一个地区或者一个省份啊,一个省份啊,就是一个,这就是所谓的主题对象啊,那这里边一行数据代表的就是一个主题对象一天的汇总行为,比如说咱们这个主题对象,咱们说的是用户,那他的汇总行为有什么呢?比如说一个用户一天呃单总次数,以及他的下单总金额,支付总次数,支付总金额啊,还有什么这个,比如说退款总次数,退款总金额等等等等。啊,那这个是不是都是这一个用户在这一天的所谓的这个汇总行为啊,是这样的啊,它是按天汇总的啊OK,那接下来我们说下一个DWT。RT呢,它是对数据进行累积汇总。啊,也就是DFT的是累积值,那这个怎么理解啊,看一下那一行信息,它代表了一个主题对象的累积行为啊,什么叫累积行为啊。
23:07
什么累积?啊,累积呢,就肯定是就应该是什么呀,应该是我们哎多天的,或者是从开始至今的,哎这个累积行为,那这个怎么怎么理解啊,看一下例如一个用户从注册那天开始,诶至今一共下了多少次单啊,然后一共花了多少钱啊,一共支付了多少次等等等等啊这叫累积行为,当这个累计行为呢,我们一般情况下,呃,除了这个从开始至今的这种累计值,那更多的还有一些什么呀?啊,更多还有一些最近多少多少天的累计值,也因为这个才是我们更关心的东西啊,就是最近一段时间,比如说最近七天的累计值,最近15天的累计值,最近30天的,最近60天累计值是这样的啊,这是咱们DWT层的还这个所谓的累积值。
24:02
啊,那大家其实现在应该就就能搞清楚了啊,DWS层我相当于是只会把当天的是不是给他进行汇总啊,对不对,那DWT呢,我当会会对什么进行汇总,会对最近多少天,或者从开始至今的每一天的这个数据进行汇总。是这样,这是DWS和DWT的这个区别啊,啊,那接下来看最后一层adsads,咱们这儿呢,没有任何建表的逻辑可言,那纯粹就是你需要什么数据,看后边应用,应用想要什么样的,你就给他准备什么样的就行了,这个没有没有什么建表的这个逻辑可言啊,好,这就是咱们这个数仓的这个分层的情况,咱们分类这样的五层。啊,分五层好行,那咱们先理解到这一步就行了,然后后续呢,我们再去做每一层的时候呢,我们还会重点的去讲到底这一层怎么做的啊好,那接下来往下看啊,咱们现在去回答一下这个问题啊。咋回事,这个逼。来看一下这有一个这个,哎,为什么要分层是吧,咱们把这个问题现在回答一下啊,为什么要分层啊,大家觉得这个数仓我不分层行不行。
25:06
其实不分层也行,嗯,不分层的话,那也就是说,比如说咱们只有一层呗,不分层是不是就只有一层,Ods层是不是,是不就只有一层,只有一层的话,那你想一想啊,你说我们后续是不是会有各种各样的需求,对不对,那就有什么需求,你就都从原始数据去查呗,是不是你从原始数据是不是只要你那个需求是合理范围之内的,那我是不是从原始数据我都能求出来。对对对不对啊,那只不过就是说,呃,你都从原始数据层去查的话呢,你可能会比较麻烦。啊,而且呢,不光是麻烦的事儿啊,还有什么问题啊。啊对,还有效率的问题啊,那包具体涉及到哪几个这个问题呢?咱们先来看一下啊,先看第一个啊,就是咱们分层之后呢,会把这个复杂问题简单化啊,什么意思啊,如果说咱们没有分层啊,没有分层啊,没有分层的话,那现在假如说给你来了一个需求,这个需求呢比较复杂,你需要从原始数据层去查,因为没有分层嘛,啊那你思考一个问题啊,你要从原始数据层查,那原始数据是不是数据乱七八糟,那用户行为还是日志呢,对不对,你还得怎么做,是不是在你这个SQL当中,是不是还得包含那个解析日志的那个逻辑啊对不对,我先费半天劲先把日志先解析出来,然后呢,再去看你这个具体的业务逻辑,这里边我逻辑要比较复杂,你可能会嵌套,是不是很多层的自杀群?
26:30
对不对啊,那这样的circle你写出来之后啊,啊,首先你写的就费劲,因为这个太复杂了,这个逻辑对不对啊,然后你写出来之后呢,如果说你一次性把它写对了还好,那诶跑通了,那很开心对不对啊呃,但是假如说这么多的逻辑,你很可能在写的时候,由于这个恍惚了一下,对吧?啊,然后可能某个地方就写错了,这时候你就得去排错了,你排错的话,这么复杂的逻辑,这个circle它不像咱们那个代码啊,代码你是不是还可以抵bug呀,对吧,这个你只能是一层一层的再去重新检查。
27:02
啊,而且这个这个可读性相对代码来说要差很多,这个circle你别说是你自己写,就是是你自己写的啊,是你自己写的啊,就即便是你自己写的,你可能你今天写明天再看你可能就看不懂了啊,这个词考它确实是比较复杂的这种东西啊,就是比可读性不好,那所以说你像这种大词课啊,你出了问题,你去定位问题会比较复杂,比较麻烦啊,那这是首先第一个问题。啊,那再一个呢,像这种circle,如果说我们后期我的业务有变化,你要去改是不是也是比较麻烦呀?啊,我也不知道我到底这个当初是怎么想的了,嗯,太太太复杂了,太麻烦了,所以说呃,不分层啊,像这种大circleq你需要经常去写啊,那这个不不方便维护,不方便修改问题啊,那所以说咱们分层之后呢,啊,那我从原始数据到DWD,我要干什么事儿是明确的,从DWD到DWS干什么是不是也是明确的呀,从那也是明确的啊,那所以说你就相当于把整个一个复杂的问题我分步去做了啊,分步去做啊,每一步都是固定的啊,那你做的时候,比如说呃,一个复杂需求,我从这一层到这一层,哎,我先看这儿有没有问题,没问题,我往下做对不对,这也没问题,往下做,诶,那你哪有问题非常明确。
28:15
啊,所以说方便我们定位问题啊,这是第一个好处啊好,那接下来看第二一个。第二一个呢,就是减少重复开发啊,减少重复开发,那这个怎么去理解啊,其实也好理解,你想一想啊,假如说啊,假如我们现在部分呢,部分层是不是还是从原始数据层开始查,对不对,还是从这开始查,你还是从这开始查的话,那你每一个需求得干查。是不是都得先去把这个日志,或者把那个数据去过滤,去解析一下啊,那这套逻辑是不是都是一样的。都是一样的,对不对,那所以说你现在怎么做,我现在我中间分层了,哎,我把数据呢,先从DS到DWD,我先给你整理好,该清洗的清洗,该建模的建模,诶完事了啊,那你后续所有的需求直接从哪拿就行了,直接从DWD时就可以了,我就不用再去哪啊,不用再去咱们诶ods层去查了啊,那是不是解析这个日志,就是处理这个原始数据的逻辑,我就不用重复去做了呀,诶可以减少重复开发。
29:15
好,那再一个呢,还有一点啊。就是咱们还能够减少重复计算。啊,减少哪的重复计算呢,是这样的啊,就是即便咱们分层了,我们现在有明细层了,对不对啊,有明细层了,那有明细层你后续是不是会有各种各样的需求啊,那样需求的话,如果没有中间这个咱们的这个聚合层啊,如果没有聚合层,那你所有需求从哪来,是不是从DWD层来,对吧,你肯定不会再去ods层查了,你可能从DWD查啊,那你从这儿查的话,那你想一个这样的问题啊,哎,比如说我这呢有一个需求啊,这又有一个,这有一个好几个需求,那好几个需求我如果说都是直接去DWD查啊DWD。啊,那我们肯定都是啥,是不是都是汇总啊,咱们这这说的都是汇总需求对吧,那我汇总的话,我是不是可能有这样的一种情况啊,我需要汇总好几步啊,先按照什么什么汇总,再按照什么什么汇总,对不对,那如果是这样的话,那你就你就得思考这样的问题了,那有没有可能我对这个原始数据,我最开始的那个汇总的那几步是相同的呢?
30:19
有可能都是相同的啊,有可能都是相同的啊,因为呢,比如说第一个需求,我需要汇总这样的几步,一步,两步,三步,四步,那第二个呢,也是这么几步啊,第三个呢,也是这么几步,第四个一样的,那有时候你会发现啊,我前面这几步啊,或者前面一步都是一样的,每个需求这这这几个需求每个都是一样的。啊,那如果每个都是一样的话呢,那你想一想啊,这需求他们是不是单独去跑啊,单独去跑,那单独去跑,那你说这一步处理他相应怎么做了。是不是就是重复计算了呀,对吧,因为我我处理相同的嘛,同样的数据做相同的处理,那就重复计算了啊,那这个肯定是不好的,那咱们怎样可以减少这个重复计算呢。
31:00
哎,我把这个中间这个汇总成啊,咱们把它怎么做,这个结果怎么样。我保留下来。我给他保留下来。这相当于就是相当于咱们大家刚学的那个RDB对不对,RD,我可以怎么做,是不是可以做那个缓存的对不对啊,那如果说我这个这个数据我后续好多都会用它,那我就给它混存下来,那咱们这其实也是这个原理啊,也是这个原理啊,我在这儿呢,是不是相当于把这个中间的汇总结果,哎,我给它留下来啊,留下来的话,那你想一想,我从原始数据到这儿是不是只需要算一次就够了呀?啊,我别的需求我就不需要再去从原始数据拿了,哎,咱们把它留下来,留下来之后,后边再有需求,我直接从这个中间结果去拿。是这样的啊,其实就是咱们这个,诶这个汇总层,它的这个主要的一个作用就是减少数据的重复计算。啊减少数据重复计算,那所以说咱们分层这块呢,也能减少重复计算啊,就是减少重复开发,减少重复计算啊,啊把这块搞清楚,那接下来往下翻,还有最后一点就是隔离原始数据啊,这个原始数据呢,其实指的是哪ODI层对吧?是原始数据啊,那实际上啊,咱们分层之后呢,啊,我们所有的需求,其实大家还有必要去从原始数据层它吗。
32:12
没必要了,因为是不是DWD层,我本身也是明细数据,也是原始的数据,对吧,只不过就是我这数据呢,是不是做了一些过滤,做了一些整理啊,对不对,但是我这个数据呢,并没有汇总,那所以说所有的需求其实从DWD我就能查出来,我从这就能查出来啊,没必要去从ods层了,那所以说咱们相当于是不是可以把咱们的需求跟ods层这个原始层给它隔离开呀,对不对,那隔离开有什么好处啊。有啥好处啊,哎,两个好处,第一个好处呢啊,因为ods层是非常这个原始的数据乱七八糟啊,里边有各种脏数据对不对,那隔离开之后呢,我我是不是就不用再去考虑处理这些脏数据的这个复杂的逻辑了呀,对不对,因为已经处理完了啊,这是第一点隔离这个呃,异常数据,那第二一个呢,还可以隔离这个数据的,呃,这个还可以隔离这个所谓的敏感数据啊,因为大家都知道从ods到DWD,咱是不是做了一个脱敏的操作呀,对不对,这样一来你做完脱敏,我们这个数仓的开发人员啊,就是新来一个哥们啊,那要开发数仓,那你还可还需要让他去查ods层吗?不需要了啊,那我我我就可以怎么做呀,我就可以做权限管理啊,我可以怎么做呢?把ods层的访问权限啊,就是给他是设定给某几个人能访问。
33:32
啊,就是咱们这个比较信得过的人啊,对不对,哎,我让他能够访问ods层啊,那完了之后剩下的呢,呃,剩下的比如说这个一些这个其他员工,哎,我就没有必要,哎把这个ods层的访问权限给他开放,我就不让他访问了啊,我只给他后边几层的访问权限。是不是这样一来的话,那咱们就可以相当于隔离这个敏感数据啊,对不对,那这个数据是不是就更安全一点了呀?哎,它就泄露不了了,这个隐私数据是这样的啊,也就说我们这儿呢,可以哎隔离异常数据和敏感数据啊,那这个就是咱们这个数据仓库分层的这个意义啊,或者叫做好处啊好,那现在呢,我把这个视频录一下啊。
我来说两句