00:00
好,那上午呢,咱们是把第四个需求,也就是说加构试试表搞定了,他呢确实很简单对吧,就有一个点啊,应该或者说两个吧,第一个呢,就是见表的时候呢,呃。在原数据当中,它是这个切格式。所以我们用了一个map这个数据类型。对吧,啊,那同时呢,像map数据这种数据类型数据的提取,咱们得这样提呃中括号,然后呢,里边放key。啊,这样的方式来提取这里边儿的数据,OK吧,好,这是第一个,呃,第二个就在于咱们的过滤。对吧,我们考虑到未来有可能有的公司呢,他会对这个架构表进行一个修改,因为有可能我刚开始追加了,我刚开始呢下订单下这个就是加入购物车的时候,我只加了三件商品,但实际上我可能不够,我又添加了两件。对吧,那有的公司业务呢,可能是分开的,这两个数据是分开的,那对于有的公司来说,可能他的业务是直接在之前的那个数据上进行了一个。
01:10
修改。对吧,他直接进行了一个修改。所以基于这种情况呢,咱们就。过滤条件啊,你不光前面的这个音色这个数据对吧,像这个里边数据照样我们也要。拿到。对吧,但是这几个过滤条件是比较简单的,这三个肯定是大家写的时候都能想明白对吧,那最后一个呢,就是你要对业务逻辑比较熟悉的话,你也能知道,好,这是我们前面的,那接下来呢,看我们的第五个需求,第五个需求呢,叫一个订单预处理表。啊呃,那为什么叫一个预处理表呢?是这样子的啊。咱们知道跟订单相关的有哪些表?有。
02:02
订单。订单明细。订单明细活动表,订单明细勾券表,也就这四张表对吧。订单明细表,All the detail。订单表or in对吧。订单明细、活动关联表。All the detail activity。还有一个。All the detail。Copper。对吧,勾券表,诶,那我们要这四张表啊,没有我们要这四张表,把这四张表呢,要关联在一块,那那关联在一块,关联在一块吧,那你为什么不叫订单实时表呢。因为像我们的。订单表大家想一下啊,在我们离线收仓里边,咱们的订单表是处理成了一个什么表,什么实时表,大家记得吗?之前我们不是给大家分析过。就是事实表的分类。
03:01
在前面聊这个维度建模的时候,对吧,分为维维度表跟事实表,事实表的分类有哪几种啊。或者你直接说我们的订单表之前分的是哪种类型?啊,税务周期累积。啊。对事物形师表。周期型快照时时表跟累积型快照时时表对吧,而我们在离线收仓里边,对于这个订单这个数据是做成什么的。
04:02
在离线收仓里边,对于订单这个需求,我们做成方总说受型时时表啊。其他同学呢?我们对于订单这张表做成的,在DWD层做成的是什么表?嗯,就方总回答了一下,我们做的是事物形示表,其他同学呢?啊,忘完了。
05:01
离线数仓里边订单表做的是什么?处理成事物型师表吗?哎,云总说累积有不一样的答案了。那到底是事物呢,还是累积呢?注意啊,咱们做的是一个累积型快照实时表,对吧,怎么做的,因为。事物啊,雷总又说事五啊,是累计啊,咱们是不是。啊。大家记得的都是事物啊。嗯,你们记得都是事物是吗?那你告诉我订单表怎么处理的?我们是不是把所有的状态给它展开,写成了一个独立的字段呢?还记得吗?我们是不是把订单他的一个状态给它展开,然后呢,去补他的一个。
06:07
信息。对吧,来来往回翻一翻啊。嗯。累积。注意订单对吧,我们呢直接。不就有一个。购物车的周期型。啊,那这边理论部分看啊,下单日期,支付日期,发货确认收货日期。对吧,那很明显我们呢,这个订单。他呢,是。可数的。啊,你们现在就不用这个累积了是吗?就没有建这张表了是吗?把所有业务给他怎么样。
07:02
拆开了是吧。你们把所有的业务给他拆开了是不是?啊,你把所有的业务给他拆开了,那也行啊,那其实我们想说的是什么事呢,就不管你这个离线用的是什么,那你要离线现在改成了都用的是事物形实时表,那就更好聊了。啊,那就更好聊了。对吧?好,那既然没有用累积,我想说的是什么?就算你离线用的是累积,我们实时也没办法做这个事儿。对吧,实时也没办法做这个事儿啊,那么在实时里边呢。咱怎么去把这个数据累积起来呢?那不可能。对吧,啊,因为我们地道地层呢,是在这个放到卡夫卡的。啊,放到卡夫卡的,那你在我们have里边,你还能去改那个字段,那在卡夫卡里边数据写进去了,你后面怎么去改,诶支付时间,到货时间这些东西怎么改呢。
08:09
就改不了了。对吧,啊,那就是之前我们的书仓里边呢,还是用这个累积型,现在可能最新最新的给他干掉了啊,咱们班可能会比较更新一点啊,但是我看他在前置理论里边放了,还放了那个订单,还特别拿订单举例子的,我就没有具体看那个订单表啊,那就那就更好聊了,对吧?啊,那确实我们呢,嗯,把所有的。用户的动作给它拆开,有下单退单,取消订单对吧,这些东西呢,给它拆开啊,那这个预处理的表是怎么回事呢?因为我们下单退单,还有取消订单这些个东西大家想啊。包括假如说什么到货啊,这些业务逻辑,它是不是都是针对于订单表而言的,就是里边改了一个状态的字段。
09:02
对吧,就是状态这个字段在变,其他东西是不是都一样啊,对吧,所以很简单,既然我们未来呢要关联。这些个表。啊,那咱们能不能这样我呢。先不挑状态。所有的数据呢,我都去。这样处理一下。对吧,所有的数据咱们都这样去处理一下之后呢,你要什么数据,你拿着我这个订单预处理表做过滤。对吧,因为就是订单预处理表当中呢,呃,有下订单。对吧,然后呢,取消订单。就是所有的状态都保留在里边了。然后只是做了一个关联对吧,所以我们在这边说了,呃,订单明细表,取消订单这些来源表结构全部都相同,只是业务逻辑过滤条件不同。
10:01
对吧?那么为了减少计算,可以公共部分提取出来形成一个什么呢?叫订单预处理表之后你想要下单,那你就过滤出下单,你想要退单,你就过滤出退单,你想要取消订单,你就过滤出取消订单。对吧,所以在这张表里面呢,我们要保留类型和old的字段,这些东西呢,都要保留,因为如果你不保留,那么接下来你这些数据就不太好做处理了。OK吧,你就没办法去做这个过滤了啊,所以呢,这也是我们关于整体的一个说明,哎,它中间多了这么一张叫预处理表,那其实我不做这个事可不可以呢?也可以对吧,我直接从topic DB里边过滤出来我想要的下单。啊,过滤出来我想要的下单。数据对吧,然后呢,跟这个订单明细关联,跟这个。所有的其他内容进行一个关联。
11:02
就好了。对吧,啊,那咱们可以这样去做这个事啊,可以这样去做这个事儿啊呃,但是呢,有这张预处理表,我们就是有的业务逻辑呢,就可以写一次了。啊,特别像关联其他表的一个操作对吧,这种招引它的效率呢,肯定比较慢啊,那咱们呢,就用一张表去招引之后呢,去取出来我们的数据过滤就好了,但是这里边的一个点啊,呃,还有一个字典表对吧,这是维度退化的表,更重要的一个点,这里面我们要用的什么,他们俩呢,Join引跟他呢,最后也是join引,但是跟这两张表呢。用的是left,大家还记得吧,对吧?啊,所以呢,咱们这个需求。整个思路就出来了。首先消费topic DB。对吧,接下来呢,分别过滤。订单明细表、订单表、订单明细活动表与订单明细优惠券表。
12:00
对吧,分别过滤出来这些表,然后呢,构建一个路表,但是这个工具类已经写好了之后,把这几张表关联到一起。就好了。对吧,那无非这个需求呢,就是看起来这个表会比较多,字段呢会比较多啊,所以呢,我再带着通过这个需求再带着大家处理一遍,像这种字段应该怎么去做,对吧?那后面呢,我说过就不一个一个就处理了,就主要的用来分析一下我们的业务逻辑。OK吧,啊,就是这就相当于在实时数仓里边啊,咱们肯定要把这个业务线给它分开。对吧,因为就算你离线收单用了累积型快照水表,那实时出仓里边也做不到这个事儿,你也只能把所有的这个流程呢给他拆开啊,拆开就做这个事儿,OK吧?啊,这是我们整体的一个需求介绍啊,突然来了一个什么预处理表,感觉很奇怪,对吧,你要清楚一下,那这张表呢,你在生产环境当中其实也可以没有。也可以没有。那原因呢,就在于我们。
13:00
说这个数据量相对来说比较小嘛。对吧,我可以过滤啊,但是呢,有这张表好处在于什么呢?因为这里面有装引操作,你懂吧。这里面有draw操作,这个操作呢,它相对来说。会比较慢一些啊,所以呢,我们呃,搞一张预处理表呢,提高它的一个效率OK吧。呃,这里面呢,我们要用level join啊,实际上过程呢,这个知识储备我们已经之前都已经讲过了,对吧,都已经讲过了啊,这个就不聊了啊好。那关键的问题在于什么呢?还有一个点,哎,大家还记得使用left join以后。我们的数据是什么,假如说左边。啊,右边。对吧,他单独来了一个1001,那么输出结果呢,是不是1001。那。对吧,右边为呢,左边呢有数据对吧?好这个呢是I新增,然后右边呢,在规定时间内来了1001,那数据什么样子的,有一个D对吧,把这个1001那给他干啥。
14:08
撤回啊撤回撤回之后呢,重新来一个I10011001,这个没问题吧,大家还记得是不是。这个没毛病的,给我扣一好吧。好,那我们之前用的是表去打印的。对吧?啊,我们接下来介绍的就是里边当前这个需求里边我们还要扩展一个新的东西,当然这个我们放在最后啊,呃,那你看啊。咱们呢,是要。有撤回我们之前是拿表打印的,它前面呢,有这个I Di对吧,这些东西,那如果我转化成硫,那你告诉我应该用什么流啊。
15:04
如果说我把这张表转化为硫打印。那应该要用什么流?对了,要用到。撤回流。对吧,很明显,那你用end追加流肯定不可以了,因为这里边呢,它有一个什么。D。对吧,他可撤回这个数据。好。那么我们想一下,我们DWD层呢,都是放到卡夫卡的。哎,那我问你,你之前卡普卡的那个连接器。他能写撤回流的数据吗?就是我们之前。所写的卡夫卡的连接器,我们创建的什么DDL,对吧?创建一张表,然后创建一个DDL,大家告诉我它能写撤回流的。
16:01
数据吗?这个连接器能用作撤回流去写吗?能不能?很明显。不行吧?对吧,很明显不行啊好,那所以呢。咱们要扩展的新的知识点就是什么呢?诶怎么将这个撤回流,这种流写到卡夫卡里边。对吧,这是我们里边要学习的一个新的东西,当然呢,这个我们放在后面啊,它在官方当中提供了一个什么呢?叫阿色的卡夫卡的一个连接器啊,这边呢,可以大家提前看一下。呃,连接器哈,在这边。Connector对吧?呃,Table API的连接器卡夫卡,哎,这边还有一个什么叫阿瑟的卡夫卡,所以呢,这又是一个新的东西。大家之前没有学过的对吧,你们之前在学fli的时候应该没有讲这个吧。
17:04
是不是没有讲。对吧,所以我们在这个需求当中呢,就要用到这个UPS卡夫卡,用到这样的一个连接器,它呢就可以将类似于那种撤回流的数据写到。卡夫卡里边。对吧,至于他是真把那条数据给他删了,撤回了,还是做了什么处理,那具体的我们到时候写测试,再去聊这个事儿。对吧,所以整个这个需求呢,看起来我们这里来介绍一下啊,直接。到。这个位置吧,直接到这个位置对吧,我们来看一下里边的内容啊。好,这边呢,消费ODS还是一样的topic DV这个数据对吧,接下来呢,我们要过滤出我们想要的数据那。订单明细表。
18:01
诶,那这个呢,我们要的是下订单最细力度,所以呢将它作为主表。将它作为主表,因为它的力度更细,它是到SKU级别的,对吧,它是到SKU,它比我们订单表这个力度呢,要细,多一个SKU对吧,多一个商品力度啊好,那第二个呢,是我们的。订单表,但是订单表里边呢,它有当前这个订单的一个状态。这个是他的优势对吧,哎,他有这些个状态。啊啊,那我们要把这个类型啊O的字段都得保留下来,因为我们未来可能还要用它做下单跟退单啊,就取消订单这两个业务线对吧,所以呢,你字段都要保留着,你要不保留你未来就不能过滤。你就区分不了他这个是下单的操作还是取消订单的操作,你就区分不了了,对吧,所以呢,都要保留。啊,当然这个也是我建议大家的一件事情,就是说你到公司当中,你对于这个业务不太熟悉,你拎不清。
19:04
哪些字段要,哪些字段不要的时候,那你就都保留就好了,对吧,你就不删啊好,这是我们第二个订单表啊。呃,第三个。订单明细活动表。啊,那这个就是正常的一张表,你过滤出来就行了,对吧,获取我们的活动ID和活动规则ID对吧,那因为我们其实只需要这个东西,当然还是一样的,等会儿我写的时候呢,可能我会保留全部的字段,这张表里边所有的字段我都保留。OK吧,这是告诉大家,你工作的时候你可以这样玩啊,呃,这个地方呢,是因为我们在未来我知道有哪些需求不需要啊,嗯,我们所有所做的需求就不需要。订单明细,活动关联表里边其他的字段,所以我就很放心的把它删掉了,对吧,因为我们的需求里边不涉及到这些东西,所以我就删掉了这个意思啊,那如果说你要涉及的话,那不好意思,你不能删,对吧,或者说你搞不清楚到底未来的需求会不会涉及,那你就都保留啊,那下一张表呢,说我们的订单明细。
20:14
优惠券关联表对吧,那同理他呢,也保留这个,呃,优惠券ID就好了,然后呢,就关联啊,关联我们的这个数据啊,之后建立my circle lookup base d这张lookup表为表,对吧?之后呢,把这五张表进行一个。关联。啊,进行一个关联。好吧,哎,那这张这个东西呢。我们要进行一个。关联,形成我们的预处理表。对吧,在关联的时候呢,他俩。对。啊,跟他level draw跟他level,跟他呢,又可以用噪音了。对吧,又可以用到join了啊是这个意思,好,那么这个就搞定。
21:03
啊,搞定好以后呢,就可以把这个数据写出去啊,注意写出的时候呢,要用到一个东西叫阿卡卡的一个连接器。啊,一定要用到阿四的卡夫卡的连接器啊,不要用原来的那个连接系统用不了了,对吧?当然我们再把这个处理完,假如说数据打印了这个东西呢,我要额外的先写一个简单的例子,对吧,先不着急啊,先不着急直接写它,因为呢,这个里边字段会比较多啊,这就我们整个的一个思路,其实就是五张表做一个关联,然后再写出去,对吧,只不过说这里边会涉及到的表比以前要多了。同时字段。也多起来了,你在处理字段的时候一定要注意,一定要小心,对吧,生产环境当中可能一张表有上百张字段,那你在处理字段的时候尤其更要小心了,对吧?啊,咱们这个字段呢,相对相对来说还好一点,没有那么多对吧?好,那这个呢,就是我们的一个整体的一个思路啊好。
22:08
好,那接下来呢,我们coding首先呢,代码当中先添加了一个工具方法,那这是阿布的卡普卡DDL,我们先不管对吧,这个呢,到最后我还要给大家先写一个简单的例子啊,大家大家知道,就是我们以前那个连接器没办法往卡夫卡去写,所以呢,我们要用到这个阿的卡夫卡啊好,那我们把主程序拿过来啊,呃,我先呢拿它啊。这个类名呢,我去拿一下。我把这个ID拿过来啊,在这对吧。呃,然后还是到我们的DWD这块去写。DB这啊。All the pre process就是预处理表对吧?
23:00
好,按照我们刚才所说的。第一步,那当然是获取执行环境喽。获取经营环境对吧,那么。第二。啊,那么第二就是。获取topic DD。创建这个表对吧。创建DB表。啊,把这张表先要创建好啊,那接下来呢,就分别过滤出来我们想要的那些数据,对吧。那这个。啊,过滤什么呢?呃,过滤出。订单。明细数据。对吧,好。第四步。关于说订单数据对吧,反正都保留吧,那第五步。
24:00
过滤出叫订单明细。活动关联表。数据对吧,好,那第六个。哎,把这个拿过来。活动还有一个购物券。勾线关联数据对吧?好,那第七个呢,就是我们的卢卡表。啊,创建叫base。Dic的。Look up。对吧,好,那第八步呢,就是关联这五张表。好,那接下来呢,我们就准备把这个数据写出去。对吧,啊,准备把这个数据写出去啊,但是呢,呃,写出的时候呢,我们肯定要构建一张。
25:00
卡夫卡的表吧,对吧,好,那创建这边写创建。这个叫up。卡不卡表啊,然后呢。将数据写出。这样数据写出对吧?啊,当然呢,你如果说转化为流了,或者做什么处理对吧?这边呢,你也可以加一个这个,呃,任务启动,因为中间呢,我们可能要转化为流,做一些打印啊,因为硫打印的话会更好看一点,如果你直接用表打印,字段太多了,它就重叠到一块了,对吧?所以呢,我们把这个也加上啊,万一要用到了,我们就直接在这边去写一下就好了,第一个执行环境啊。拿。连表的执行环境也都有了,第二个创建topic DB表,这一步呢,我们已经做过了,对吧,那就直接table,因为点。
26:03
Circle叫MY淘点这个DB对吧,嗯,传一个消费者组就行了啊,只有一个消费者组对吧,把它拿过来。咱们那叫。21126。好,那这样的话呢,咱们就得到了这张表,然后还有一张呢,我们也提前写一下,就这张,这张呢,我们可以写上对吧,Table烟v.XQ的circle啊嗯,这边呢,我们就MY。搜有酒店看的。对吧,因为这些东西呢,我们都已经写到工具类里边了,我们就不需要这么重复的去写这些个东西了,对吧,好,那这个东西呢,搞定。接下来呢,我们就分别过滤出什么订单明细订单对吧?啊,然后呢,订单明细活动,然后呢,我们就。
27:02
不按照那个PPT说过滤出来这几个字段,这个字段那个字段,对吧,那咱们呢,就把字段都保留啊,除非像什么图片ul地址这种,我们一看就不知道,他不会用到的,对吧,我们可以把这种干掉,其他的呢,我都给它保留下来。OK吧,奔着这个去,好,那我们这个。
我来说两句