00:00
呃,2.5这一节呢,是整个数据仓库当中的建模啊,这是这也标了,是绝对重点对吧?啊绝对重点,那整个数仓咱们就分层来,就说第一层我建门怎么建啊,所谓建门就是你建什么表,表当中有什么字段,对吧?啊,那第二层怎么建,第一层怎么建,咱们这么去去看啊,来先看第一层ods层,那说ods层让咱们自己去建建表,你应该怎么建呀。啊,ODI层当时干什么来着,是不是相当于一个过渡层对不对,把文件得放到表里来对不对,那你说你建表的时候应该是以谁为准呀。以以谁为准?是不是应该以咱们那个数据为准呀,对不对,你现在通过辅也好,通过coop也好,你往咱们的H上是不是导了好多数据啊,对吧?那咱们这有俩截图啊,这个呢是我们那个日志数据,这是咱们的业务数据啊,那我我把数据导到这个路径上了啊,那我是不是得建一张表或建多张表去装这个数据啊,那你这个表怎么建,是不是得完全看你这个数据是什么样的呀?
01:01
对不对,你数据什么样,我这个表就怎么建啊,那咱们举例子啊,咱们以日志为例。啊,日志表,首先我们呃日志数据导到HDFS上之后呢,咱们呃是不是只有一个路径啊,就是呃,Or date,然后机贸log,然后topic log,然后里边呢,是不是咱们一天一个路径,一天一个路径啊对不对,这是咱们那个所有的日志,那你说你要装这个日志,你说你应该建怎么去建表,考虑俩问题,一个是建几张表,第二一个呢,表里边有什么字段,先考虑第一个建几张表啊。先拿几张表。这几张。是不是就一张啊,对不对,因为你这个是不是,虽然咱们日志我们分了好几种啊,有什么这个,呃,按内容分咱们可以分五类,按结构分咱们也可以分两类,对吧,但是你要知道咱们所有的日志是不是都混杂在一块儿了呀,都在一个文件里边呢。对不对,那所以说我们就得看这个文件是什么样的文件,都在一个文件,那我建表就建几个。就一个表就是一张表啊,然后呢,一会咱们需要把这个数据呢,是不是得漏到这张表里来呀,对不对,然后呢,这张表咱们首先第一点哎明确啊,这个表的结构啊,咱这张表得干啥呀,是不是得是分区表,因为因为咱说后续一天一天的算呀,对吧,所以说这张表应该是分区表。
02:15
啊,那再有一个,咱们来看一下这张表的字段啊,你说这张表里字段咱们怎么决定啊。怎么决定?我要保留咱们的日志。然后你要知道这个文件当中咱们的数据是什么样的,是不是就是一条日志一行,一条日志一行,一条日志一行,这个文件是不是就是这样的,对不对,那我这个表应该是啥样的呀,你说。一个字段呀。就一个字段,你要知道啊,这个数据是怎么来的,数据是不是漏过来的,漏的过程是不是不会对文件进行任何的修改,里边内容还是一条数据,就是一行就一行数,就是一条日志,那所以说咱们这个表啊,其实就应该只有一个字段,那这个字段就是啥呀?就是一条完整的日志,对不对啊,那完了之后,咱们,诶从ods往DWT导的时候,再把这个日志进行解析,是不应该是这样的一个思路啊,对吧?那所以说那ods层咱们这个日志呢?哎,就是一张表。
03:11
就是一张表啊,然后呢得是分区表,那再一个呢,字段是什么?字段就是一个字段啊,一个字段就是那一条日志,嗯,就是这么去建呗,啊那这是日志,那业务数据怎么建呀,业务数据相对来说要比咱们这个日志更好理解一点,业务数据因为本身我从咱们的买搜导过来就是什么,就是结构化的对不对,是不是就已经有各种字段了呀,对不对,那你建表就好建了,第一联首先都得是分区表啊,咱们是不是都是一天一导都得分区表吧?啊,当然有一些比较特殊的,谁比较特殊啊。啊,比如说那个地区表,省份表,因为他是不是指导一次,那他有必要分区吗?没必要,我就一份嘛,就一张表就行了啊这个特殊咱就不说了啊,其他的表每根都要打,那都得是分区表啊,那完事之后呢。建哪些表啊?需要建几张表?你导过来几张表,是不是得建几张表?那表里有什么字段?
04:02
你买so个当中有什么字段,它是不是就得有什么字段呀,是不是得能够一一的对应上才行啊,是不是就这个意思,所以说那这个很好理解,咱们不再多说了,那接下来咱们说DWD啊,那DWD的话呢,我们实际上啊啊,咱们得看不同的数据,我需要做不同的处理,咱们前面讲了DWD呢,我们对ods层做数据做处理,咱们的分类去做啊两类,一类是日志,一类是关心数据库的数据,对吧?对日志来说,我们要干啥要进行。解析啊,要解析,那这个解析呢,相当于就是把那条日志字符串,咱们得给它解析成具体的字段吧,啊,因为你老是以字串的形式存在,我没法分析啊,对吧?啊,所以说咱们得知道得解析,那到底怎么个解析的逻辑,咱们现在不多说,咱们明天再后天再说啊,这日志那对于业务数据来说,咱们要干啥呀。要进行关系啊,进行维度建模啊,维度建模啊,那也就是说我们在ods层业务数据是不是有20多张表啊,那这20多张表我得给他把,其实这20多张表他现在有没有模型啊。
05:05
Ods有没有模型,它其实有模型,就是什么模型啊,就是关系模型,为啥。因是因为你从ods层倒过来的,对不对,OD不是从O点,你从那个那个MYSO倒过来的,那MYSO本身就是关系模型,那你拿过来是不是还是关系模型啊,他们之间本身就是有关联的啊,那只不过咱们这儿要做的就是将这个关系模型给它转化成哎维度模型,那其实所谓的转化成维度模型,咱们就是哎去干啥呀。你建你你你进行维度建模,其实就干啥,是不是你就得明确我要建哪些事实表对不对,我要建哪些维度表,然后呢,哪个事实表和哪个维度表之间是有关联的。是不是得明确这些东西啊啊,然后再一个呢,明确实时表当中有什么字段,维度表当中有什么,是不是就是确定这些东西啊,那这些东西怎么确定啊,哎,我们是有啊这个理论基础的啊,有理论基础什么基础啊,在这儿呢,有一个维度建模的四部曲。
06:03
选择业务过程声明力度,确认维度,确认事实啊,那咱们如果说把这四步咱们理解了,咱们做完了,那OK,你的维度模型就出来了。是这样的啊,所以说这个重点是不是就是这儿啊。维度建模重点就是它啊,别看这个东西它字少啊,但是其实还不确实不是那么好理解对吧?啊,什么叫选择一个过程,什么叫生命力度啊啊,什么叫确认维度,什么叫认实,这还还是不是那么好理解啊呃,咱们现在因为时间关系,这块就先不展开讲了,光讲这个东西,咱们就得讲这个小一节课啊,这个咱们等周一再讲吧,啊也是咱们得知道啊,这个东西就是用来帮助我们进行维度建模的。啊啊OK,那这个完事之后,咱们将对DWDDWD,咱们主要主要的工作就做完了啊,也就是日志咱们解析啊,业务呢进行维度建模啊OK,维度建模呢,咱们来用这个思想去指导我们进行建模啊,OK。
07:01
行,那DWD搞定,那接下来呢,是这个宽表层DWS和DWT啊这个宽表层呢,咱们其实前面也管它叫什么叫做汇总层,对吧?啊汇总层那大家还记得咱们这个DWS和DWT,那这两层他们之间的这个这个区别吗?还记得吗?啊对,DWS层呢,咱们是按天汇总对不对,那DWT呢,咱们是哎按照这个累积进行汇总对不对,是累计值啊这个比如最近七天啊,最近15啊,最近30等等等等,是这样的啊那OK,那接下来咱们来分析一下啊,那这两层,那我们的建表建模思想应该什么样的啊,所谓建模呢,就是还是明确那俩问题呗,啊就是建什么表,表当中的字段怎么确定,是不是就是这些这些问题啊,那它这块咱们怎么确定?啊,这个怎么做呀。啊,其实这呢有一个小场景,咱们现在可以先尝试着看一下啊,来看一看能不能看懂啊来首先这儿呢有一个小问题是吧,来这儿一个什么问题呢?看一下啊,这儿我提出一个问题,两个需求,哪俩需求啊?呃,第一个需求是统计每个省份的订单个数。
08:12
统计每个省份的订单个数。啊,那你说这个统计咱们应该怎么统计啊,如果没有宽表层,那这个应该来自于谁,来自于DWD层对吧?DW层,假如说我们的维度模型已经建出来了啊,那咱们维度模型咱们如果说要想统计这个,你说你应该去找什么试试表。是不是肯定找订单试试表,那你找什么维度表。肯定找地区纬度表对不对,那他俩是不是得进行关联,关联之后呢,对谁进行分组,对省份分组,然后呢,对谁进行聚合呀,因为是个数,个数其实说白了就是啥呀,Count一下是不是就是个数了呀,因为在订单十表当中,咱们都知道一行数据就是一个订单对不对,那你有几行是不是就是有几个订单呀,所以行数就等于个数,哎,就这么理解嘛,啊好,那这个就是咱们做这个需求的这个方式。
09:04
那诶这个做完之后呢,我又来了一个。这会让你统计什么?统计每个省份订单的总金额,那你说他我应该找哪张实时表?是不是还是订单实时表,那维度表呢,是不是还是地区维度表,那怎么统计啊,是不是还是它俩进行关联,然后呢对省份进行分组,然后呢,这次呢对金额进行求和对吧,对不对啊,你会发现这俩需求啊,其实咱们前面所做的处理都是相同的,是不是都是同一张表,同两张表进行聚合,然后按照相同的字段进行分组,呃,不是聚合是进行那个那个join嘛,就是相同的两张表进行join,然后呢对相同的字段进行分组。啊,然后呢,只不过你那个聚合函数是不一样的,对不对,那这样一来,其实你这一块就会有这个重复计算的问题了,啊,同样的数据,诶,你做了同样的处理,这就是重复计算啊,那像类似这样的场景呢,其实在我们的这个,呃,后续的需求当中,你可能会频繁的遇到,那这个很显然是对咱们这个计算资源的浪费,对吧?那咱们怎么去减少这个重复计算呢?
10:09
哎,怎么减少啊,来就是用咱们DWSDWT层的宽表去给它进行这个来减少,那怎么减少啊,来看一下啊,怎么设计咱们这个宽表能够减少重复计算呢?来看上面针对于咱们这个上述的场景,我们可以去设计一张地区宽表啊,是不是这俩需求我们重复计算了呀,那这时候我可以设计一张地区宽表。那这张地区宽表,我的主见是什么呢?主见就是地区ID。啊,这是主键定下来的对不对,那OK,我的这个,呃,其他字段是什么呢?注意啊,其他字段是所有跟地区相关的。呃,是实表的啊,这个度量值的聚合值。啊,这句话说的有点长啊啊,咱们来重新捋一下啊啊,相当于之前维度模型当中咱们是以谁为核心的呀。
11:06
维度为以谁为核心,以事实面为核心啊,到了这个宽门,这其实咱们反反转过来了,以谁为核心了,哎,对以维度为核心了啊是不是咱们主渐是维度字段了呀,是地区主键啊,地区ID是主键啊,然后呢,我其他的字段是什么,其他字段是啊,整个维度模型当中,所有跟地区维度相关的是实表的度量值的,就是那个什么金额个数,然后呢,它的什么呀,聚合值啊,它的聚合值。啊是这样的啊,那所以说这张宽表当中应该包含主建地区ID,那自段呢,有下单次数,下单金额,支付次数,支付金额,那这些是不是都是跟地区相关的呀,那我就放在这就行了,啊是这样的啊,这是地区。啊,OK,那如果说你有了这样的一张表之后啊,你想啊,你往这张表倒数去,是不是只算一次啊,那你像这样的需求是不是就不会重复计算了呀,是这样的啊,这个大家应该能够理解才行啊好,那这就是呃,咱们解决重复计算的这个问题,那这个其实设计出来的这个表啊,就是我们DWS或DWT层的表。
12:11
啊,DLSDLT其实咱们的设计思想都是这样的啊好,那接下来咱们做一个简单的总结啊,简单总结其实就是,呃,第一个问题就是建哪些表,第一个问第二个问题呢,就是表里的字段呗,啊来看一下。哪些表建哪些表呢?咱们以谁为准,在这儿是不是以维度为准了呀,对不对,就是我有哪些维度,那我就建哪些宽表。啊,这个先明确啊,咱们先这么简单过一下,后续咱们还会再详细的说的啊啊,那第二一个啊,那宽表当中的字段有什么呢?啊,是站在不同的维度去看实时表的,这次对吧?因为实时表示核心嘛,现在维度表示核心,现在啊维度表示核心啊然后呢,这里边的字段就是什么?再总结一下啊,再重复一句,就是所有跟该维度相关的事实表的度量值的聚合值。啊,就是它其他字段嘛,啊好,那这就是咱们一个总结好了,总结最后一点就是WS和DWT咱们有啥区别,WS呢,我存放的是主题对象的当天的汇总行为啊,那DWT层呢,咱们存放的是累积行为。
13:16
层就是这点区别嘛,啊啊,这就是咱们这个DWSDWT这两层要做的事儿啊,那接下来咱们看最后一层ADS层,ADS层呢,没有任何建模思想可言,ADS层就是看你后边需要什么数据了,你后边的应用要什么,哎,我就给你准备什么就行了啊这个不需要建模啊,就是存结果的,说实话说白了存结果存结果啊啊这个就完事了啊OK,那我把视频录一下。
我来说两句