00:00
好,那我们继续看DDDWD比较多对吧?啊啊,那这两层的设计思想啊,大致是相同的,那所以在这儿我们把这两层放在一起讨论啊啊,那现在我先简单告诉大家一声,那DWF和DWT这两层它的主要目的就是啊,提高数据的复用性,然后呢,避免重复计算。啊,那大家肯定会想到一个问题啊,就是诶什么情况下会有重复计算呀,那这两层又是如何去避免重复计算的呢?啊,OK,那接下来我通过一个小案例啊,把这两个问题给大家说明一下,来大家跟我一起想一下,那假如现在我们来了一个这样的需求,把这个需求让我们统计每个省份的订单的总个数。啊,每个省份的订单格式,那经过简单的分析,我们能得到这样的一个计算方案啊,那首先我们需要先拿到订单实时表,再拿到地区维度表,那他俩是不是得做一个关联啊,对吧?那关联之后,诶,我们需要按照省份进行分组,然后呢,再来一个count星聚合是不是就OK了?那这样一来我们就能够得到每个省份订单的个数。
01:14
没错吧,啊,这个很简单啊,好,那接下来我们再看下一个,过了一会儿又来了一个需求啊,那又让我们统计啥呢?又让我们统计每个省份的订单总金额。啊,好,同样是经过简单的分析,我们也能得到一个计算方案,是不是还是拿到订单实施表啊,拿到地区维度表,他们两个也要做一个关联,对吧?然后呢,也是按照省份分组,只不过这次我们不是看星了啊,我们应该用sum函数对订单金额进行求和,对吧?啊,那这样一来我们就能得到哎,第二一个需求的结果。啊,这两个需求其实都很简单啊,呃,当然咱们现在的主要目的不是分析这个需求它的难易啊,我们是想是不是说明一下这个重复计算的问题啊,大家有没有发现这两个需求啊,他们读取的是同样的实时表和维度表,做的同样的join操作啊,同样的分组操作,唯一的区别是什么啊?是它们的巨额函数不同对吧?
02:08
啊,没错吧,啊,那这里边儿是不是显然就会有大量的重复计算呀,对吧?啊,那其实呃,类似的场景呢,可能还会更多啊,是这样的啊好,那所以说我们接下来就得思考一下了,怎么样能够避免这个重复计算呢?哎,怎样能避免这个重复计算啊,其实也很简单啊,很简单,那针对上述场景呢,我们可以设计一张地区宽表。啊,那这个宽表它的字段是什么样的呢?那首先我们先明确一点,那它的主见是什么啊,它的主见是地区ID。啊字呢,是维度模型当中跟地区相关的事实表的,哎,度量值的聚合值。
03:00
啊,那也就这里边呢,会包含什么字段呀?诶会包含,比如说呃,订单的次数,那订单的金额,那支付的次数,支付的金额,退单的次数,退单的金额,退款的次数,退款的金额,总之只要这个业务事实和地区维度相关,那我们就应该把它的度量值的聚合值放在这个宽表当中。啊,是这样的啊,那宽表有了之后呢,哎,我们需要从DWD层哎,把这个相应的结果啊,一次性的聚合起来,聚合起来之后呢,诶,把它写到咱们这个宽表当中啊,把数据保存下来,那这样一来,我们后续再有类似这样的需求,那咱们就不用再分分开或者要分别去统计了啊,我们这儿已经提前算好了,那后边直接哎,从这个宽表当中获取我们想要的结果就OK了。啊,那这样一来呢,就能有效的避免重复计算这个问题。啊,是这样的啊,那当然我们现在仅仅是针对我们这样的地区相关的统计啊,咱们设计了一张地区管表,对吧?那我们后续的需求可能还会有,比如说针对不同商品的统计啊,针对不同用户的统计,没错吧,针同针对不同活动的统计等等等等,诶我们还会有类似这样的一些需求,那所以说哎,我们考虑到所有的情况,那最终啊,咱们定下来一个宽表的设计方案啊,那这边咱们怎么设计呢?咱们明确一点,首先第一个问题啊,就是我们需要创建哪些表。
04:30
啊,那OK,刚才大家应该也能发现啊,咱们去做统计的时候呢,基本上都是按照维度进行统计,对吧?我们会统计不同省份,不同商品哎,不同地区等等等等,没错吧,那都是按照维度去统计,那所以说这个宽表咱们去创建的时候呢,也是以维度为基准啊,那我们有什么维度就对应着,那给他建一张相应的这个宽表啊,那我们上边有地区维度,有商品维度,有用户维度,那这边呢,我们就会有地区主题啊,这个用户主题,那商品主题等等等等,那每个主题对应一张宽表。
05:05
啊,是这样的啊,那宽表当中的字段哎,怎么确定呢?呃,每张宽表它的主都是对应的这个维度的ID对吧?啊,那其余字段是什么呢?其字段就是跟该维度相关的啊,实表的度量值的聚合值。啊,这就是咱们这个宽表的设计思想啊,是这样的啊,那我们刚才提到了,那DWS和DWC是两层对吧,那这两层他们的设计大致相同的啊,大致是相同的啊,但是有一点是不同的。啊,什么哪一点是不同的呢?啊,刚才咱们提到了啊,提到了宽表当中咱们存的是不是都是度量值的聚合值啊,对吧?那这个聚合我聚合到什么程度呢?啊,这两层是不同的,DWS呢?哎,我只会把当天的数据聚合起来啊,而DWT呢,哎,它会把最近N天的数据聚合起来。啊,也是,这个是,哎轻度汇总,那这个呢,是累积汇总啊OK,那接下来我们看一个最终的总结,那总结一下我们这个DS和DWT这两层的设计思想,那首先第一个啊,那就是需要创建哪些表,那在这儿呢,当然是以维度为基准,对吧?以维度为基准,OK,那接下来下一个,那宽表当中字段是如何确定的呢?啊,那首先我们要明确一点,宽表的主键那就是啥呀?哎,就是不同维度的ID。
06:28
啊,是这样的啊,那OK,那其余字段是什么呢?其余的字段就是呃,维度模型当中跟该维度相关的度事实表的度量值的聚合值啊这是哎,咱们字段如何确定啊,然后呢,我们再往下走啊,那看一下这个最后啊DWS和DWT2层的区别啊D的。例如每个地区当天的下单次数,下单金额,而DWT层呢,我们存放的是所有主题对象的累积行为啊,例如每个地区啊,最近七天,最近15,最近30天的下单次数,下单金额啊,支付次数,支付金额等等等等。
07:16
啊是这样的啊,那这就是我们DD层,那我们要记住一点啊,就是它的主要作用是啊,就是为了呃,提高数据的复用性,然后避免重复计算。
我来说两句