00:00
那来各位同学,那现在呢,我们看一下第五张事实表,我们称之为交易域的退单事物实实表,那当然这个退单所对应的业务过程其实很明显,是不是就是那个所谓的退单呀,对吧?但其实这个退单说实话他也不是一个原子的事务操作,对不对?大家平时应该都有过这个退单的经历,对吧?那我是不是退单跟下单一样,也是会有一个固定的流程的呀,对吧,你好比你比如说我点完下单,我下完单之后他正常会怎么样呢?你你需要去付款,付款完之后呢,商家需要发货,那之后呢,咱们要确认收货,这个是不是下单的流程才能走完了呀,对吧?那退单其实也是一样的道理,对不对?退单你首先需要干啥?需要先申请退单对不对?申请退单完之后呢,申请退单完之后呢,那是不是商家需要去审核呀,对吧,那审核完之后呢,咱这边呢,需要给他发货,最终他需要收到货物之后,是不是才会同意退款,然后把钱给咱们,那是退单是不是才算是这个流程走完了,对他也是需要一个固定的流程了那。
01:00
咱这个所谓的退单的实施表对应的业务过程是哪一步呢?实际上在这儿了,我们对应的是申请退单的那一步,是申请退单那一步,只要你点了退单OK,那我就需要记录一条相应的记录,就是不管我这个退单最终有没有成功对不对,OK,那我都要给他记录下来,也就是咱这儿这个退单对应的是申请退单那个业务操作,业务过程,这个搞清楚啊好了,那完成之后咱们继续往下进行,下边就还是按照之前那个顺序去设计一下咱这张表的这个表结构啊,来吧,首先我还是找到业务总线矩阵来,首先第一步我们要做的就是选择业务过程,就是退单来,那大家想一想,你说它的力度应该是什么样的呀?啊,一行肯定是一次退单操作对吧,那我们要精确到什么程度。他要精确到什么程度,我们需要精确到是谁在什么时候他退了哪件商品,是不是应该是这样的一个力度才可以啊对不对,OK,那这个完成之后,我们继续往后看,第三步就是确认它的维度,那维度呢,看一看都有啥啊,这里边首先大家看到的有这样的几个维度,时间啊,用户商品还有地区对不对,就是谁在什么时候,在哪儿是不退了什么商品啊对吧?那除此之外呢,我们后边还有两个维度,那分别是什么?退单类型和退单原因类型,呃,那我OK先给大家介介绍一下,就是这俩所谓的类型指代的是什么啊?退单类型就是那个退货退款和仅退款对不对,这个到底是哪种类型,取决于咱是在什么节点去发起那个退单的,嗯嗯,没问题吧,呃,这个道理应很简单,比如说你在付款之前啊,你退,那就是仅退款呗,呃,那那呃付款之前,呃,付款之前谈不上退款啊,你要是付款之前,在你收到货物之前对不对,你退,呃,那就是相当于是仅。
02:43
退款对吧?啊,这个如果收到货物再退,那就退货退款就这个意思啊,这个理解一下,好,那接下来我们继续往后进行,那下边呢,我们要讲的一个就是退单的原因类型,这个原因类型里边有什么的啊,就是很简单,就是什么七天无理由啊,对吧,不想要了啊,什么这个尺码不合适等等等质量问题,就是这些东西啊,这个理解一下,那理论上这些是不是也就是就是典型的这个维度啊,对吧?那在这儿呢,我们理论上也应该为其是不是创建一个相应的维度表,对不对,但是有一个比较简单,我们没有建,我们把它做了一个什么操作呢?还是维度退化啊,这个理解一下就行了,好了,那这是我们这个相关的维度,那维度完之后,我们看最后边是不是最后一步就是确认事实蓝呀,对吧,那事实相对比较简单,它这呢只有两个,呃,明显的度量值,一个就是退单的件数,一个就是退单的金额,对吧?你退这些商品,你退了几件,你一共退了多少钱,诶这就是咱度量值,那当然里边还有一个隐含的度量值,就是那个次数一对吧,这个就不再多说了啊好了,那截止到现在这张表的设计过程咱就走完了,走完之后我们快速的看一下它最终的鉴表语句来吧。
03:43
把它拿出来,C拿过来之后呢,我给它放在这个位置啊,来吧,我们现在一起把这个键盘语句看一眼,呃,首先我们先看一下它的这个表名啊,表名叫做d WD orderfund INC交易orderfund是业务过程,也就是退单,对吧?好,这个很简单,我们继续往后看,来明确一下,就是它的行,还有列,还有分区啊行呢,刚才已经说过了,一行代表的就是一次退单操作记录,对吧?我们需要明确到是谁对不对,他把哪个商品对不对,在什么时候给退了,对吧?这里边其实这些维度就能体现这个力度,对吧,对吧,在某些情况下,咱们这个维度的组合是不是就能把这个力度体现出来呀,但应该是有所体会的啊。好了,那接下来咱继续往下进行,呃,这个行明确了,我们再来看列啊,那列我们还是分两部分去看呗,维度加度量维度呢,我们一个看啊,首先用户ID,商品ID,地区ID这个呢是时间ID这个没啥问题,对吧,然后我们这里边是不是还有退化进。
04:43
来的两个维度,哪两个来着,一个是退单的类型,一个呢是退单的原因类型,对吧?那这俩呢,我们如果从从我们的业务表里呢,它只有编码,那我们在这儿呢,需要给它加上文字说明,诶这是还需要注意的,然后再往下走,这儿呢,还有一个退单的原因描述,其实就是一些文字描述,这个东西其说实话也没有太大的作用啊,咱们也给也给它放在这儿也没啥坏处啊行接来往下走,下边这俩是啥呢?那就是度量值了,一个是推单的箭数,一个推单的结合,诶其实相对比较简单,那列咱就要看完了,那最后呢,就是它的分区规划,那大家想想它的分区规划啥样的增量分区呗,这个数就不用多说了,对不对?好了,那这样一来的话,我们这张的表结构就算是确定下来了,来视频我给他停一下。
05:26
嗯,好了,各位同学,那现在接下来呢,我们要分析的就是它的数据装载,咱应该怎么去做,呃实像它的数据装载做法呢,跟之前的这个分析思路是一样的,我们也得先去分析数据的流向,对吧?数据从哪来,最终到哪去,这个数据应该从哪来啊,这张表还还是得分析,就是你退单会对谁产生影响,对吧?OK,那问一下大家,你说退单咱们会对谁产生影响,呃,OK,那ordero会不会受到影响,分析一下你退单的时候,比如说我这有一个退单申请,诶提交了对不对?那退这个这个订单的状态会不会变,应该会变,对吧?那状态肯定会发生变化,对不对?那他变成什么状态呢?
06:06
你找一下,比如说有一个人申请了退单了,那这个订单会发生什么样的变化,应该会变成汇款中的一个状态吧,对不对?等这个退单的流程都走完,那我这个人收到最终的货款之后,这会变成什么呢?退款完成对不对?那这一点咱们要搞清楚好了,那接下来呢,我们继续来分析啊,那在这我们要拿的是什么?我们要拿的是退,相当于是一个什么呀,是一个退单的明细吧,能能理解吧,我们需要精确到是谁在什么时候退了什么商品,没错吧,那我们从order info这张表里能找到那个具体的商品信息吗?你找不到对不对,这是一个订单嘛,对不对?你找不到,那你要想找到你怎么办呢?说不理论上还是得用它去关联订单明细啊,对吧,那咱们这么去关联行不行?这么去关联行不行,能不能找到咱们想要的退单的那个明细记录,相当于是能拿到。
07:01
啊,我再重复一下刚才的思路啊,那首先第一点,我们刚才说了,从order,我们是不是能够找到那个退单的那个订单呀,对不对,这个没问题,那用退单的订单去关联这个订单明细,这是我们之前惯用的一个做法,对不对,那你说在这儿咱还能不能这么去做。这回咱就不能这么做了,为什么这回不能这么做了,道理很简单,大大家想一想啊,就是说我们这儿假如设有一个订单对不对,那我下单的时候,我是可以把这个订单当中所有的这个呃,商品我是不是一起下来呀,对吧?那我退单的时候,大家平时有过退单的经历,你说我退单的时候,我是只要一退就必须得把这个订单里边所有的明细都退了吗?并不是,你退单的时候是不是得分明细去退啊,对吧?我可以只退一个,没没问题吧?好,那假如说我们现在都是这么去退的,那你要是从诶,Order info里边先找到那个退的订单,再去关联明细,对不对,那你找到的准确吗?是不准确的,没问题吧?啊,那所以说在这儿我们不能用这种方式去找咱们这个退单的操作记录了,OK,那我们应该怎么去找呢?诶,对,我们其实有一张表,里边专门存储了这个退单的操作记录,对吧?那就是谁order refund info,诶那这张表大家现在熟悉不熟悉这张表啊,不熟悉我们就来现场熟悉一下啊,首先还是先明确它的行,还有列。
08:19
啊,OK,看一看它每行代表的内容是什么,这个我就不再给大家提示了,大家自己看一看,看能不能看明白。先明确他们每行代表的内容是什么。一行应该就是一个啥呀,就是一个人对不对,对一个订单里边的一个商品的汇单操作吧。应应该就是这样的一个力度,对吧,他其实就正好就是咱们想要的那个是谁对吧,在什么时候把什么商品给退了,是不是就正好是这样的一个力度,对不对,所以这张表其实就是咱们想要的数据啊好行,咱们明确了,那接下来呢,我们再来看一看它具体的字段都有啥啊,大致的了解一下,那首先第一个。UID这个不多说,OLDID也不说,SQID也不用说,对吧,很简单,那完之我们往后看,这有一个什么,就不是那个reund type,是不是就是所谓的退单类型,对不对,这其实叫那个退货退款和仅退款啊,这个我们就不再去看了啊,接在往后走,这有一个什么呢?就是refund number退单的件数,这个呢是refund amount是退单的金额呀,对吧?好,那现在我们继续往后看,那这儿呢,还有一个refund re type支出这个原因类型,对这个咱就不多说了,然后继续往后看,这还有一个字段叫做refund的status,是不是就是一个所谓的退单的什么东西状态啊,对吧?哎,退单的状态啊,OK,好,那咱接下来呢,看一看这个状态到底都有啥,里边咱看到的是0705,对不对,那里边还有啥其他的状态呢?我们去看一眼来找到被CDC找到零七开头了,在哪?在最下边来大家看一下,那这里边呢,就是零七开头的所有的编码里边会有什么呢?0701是什么?商家审核中,0702是商家审核通过,然后0703呢。
09:59
是未通过对不对,0704是买家已发货,0705是退单完成对不对,0706呢,是最终的一个退单失败的一个结果就有可能对不对,你申请了之后,人家商家不同意对不对,或者他收到货物之后呢,发现你货物损坏了,对吧,我不同意对不对,那这样一来的话,最终的状态是可能会失败的,这个理解一下啊好了,那这就是咱们这个所有的状态,好,那现在我们再回到刚才这张表当中,那目前大部分都是0705,这说明这是一个什么呀,最终最终成功的一个退单操作对吧?好,那接下来继续往下看,那这儿呢,还有一个字呢,叫做cur time,其实这个create time,大家琢磨琢磨,你说这应该可以作为一个什么时间。
10:37
Cur time,这应该其实就可以作为一个申请退单的时间吧,对不对啊,OK,这个大家应该是能够想明白了啊,好了,那张表的表结构咱们现在就搞清楚了,搞清楚之后呢,那现在呢,我们来捋一捋,就是退单的这个业务过程是如何对这张表产生影响的,这一点咱得搞清楚啊,好,来分析分析吧,你说我退单这个业务呢,会对他产生什么样的影响?
11:01
对吧,比如说有一个人,我现在呢,申请了一个退单,OK,那这张表会发生什么样的变化,是三的一条数据,还是update的一条数据?显然应该是因四二的一条数据吧,没问题吧,OK啊好,那也就说在这儿呢,我们诶一退单这个业务过程对这张表的影响逻辑非常简单,就是因四二的一条数据,那当然这张表的数据将来会不会发生变化呢?其实也会发生变化,对不对,比如说我这个馈单,那我有了新的进展对不对,那这个状态是不会发生变化呀,对不对,这个大家理解一下就行了啊好,但是退单啊,我们这所谓的退单其实就是指的是申请退单啊,申请退单那对他的这个影响就是一个音色的操作相对比较简单,好了,那这张表的表结构,还有它的变化逻辑咱们就都清楚了,清楚之后那咱们来分析分析啊,我们如何从这张表当中找到咱们想要的数据,咱怎么去找?我去找啊,那找的话是不是得分两种情况,一个是首日,一个是每日啊对吧,我们也得分首日和每日,那首日我们拿到的数据跟这张表现在的数据是不是就是一样的,对不对?好怎样从这里边找到咱们历史上的一个一个的申请退单的操作记录。
12:08
诶,你说这张表一行数据能不能作为一个申请退单的操作呀,能不能,其实是能的,对不对?咱们刚才说过了,这张表,这张这张表里一行数据是怎么来的,是当有人申请退单的时候,是不是才插入进来的,对不对?那所以说一一行数据不就正好会对应一个申请退单的操作吗?所以这个是没问题的啊,也是我们第一天的时候直接拿到这张表的数据,那就完事了,对不对,这就是全部的历史上的推单操作,那之后呢,我们需要做一个什么操作,动态分区,然后把数据是不是写到不同的实时表的分区啊,对吧,这个搞清楚就行了,好,这是首日,那到了每日的时候呢,每日咱们拿到的就不再是这样的数据了,而是insert up的操作,对吧?好,那这些操作里边哪些操作才会对应申请退单呢?应该是inser的还是update类型inser的吧,对吧,刚才咱不说过了吗?你退单的时候是不是会往里边新增一套数据啊,对不对,所以说我们每日的时候只需要找inser的类型的操作,那就完事了,所以实际上呢,这张表它的数据装载基本上咱们就明确下来了,相对比较简单啊好了,那现在少日和装载的这个大体逻辑咱们就定下来了,那一会儿呢,我们就把这个circle给他去实现一下啊来视频我先停一下。
13:14
啊,好啊,各位同学,那接下来呢,咱继续往下进行啊,那刚才呢,咱们大致的已经分析完了,就是这张上的首日跟每日的状态逻辑了,那现在我们快速的给他实现一下,那目前我们先去实现它的首日状载,首日呢,我们当然还是假定日期就是14号对吧?那先来分析分析这个具体的逻辑怎么写?呃,按照我们刚才的分析呢,我们主要的数据应该是来自于哪了,应该是来自于ods层的older refund的in for这张表,对吧?那第一天的时候我们拿到它是14号这个分区的数据,那就OK了,那当然了,我们就进一步的过滤过滤啊,T应该是,呃,Type得等于boot,然后down insert类型的,对吧,In ser OK,那这个数据先拿到,拿到之后我们需要里边的哪些字段呢?实际上我们绝大多数的字段是不是应该是都需要的呀,对吧?我们可以先尝试着把里边所有的字段都给它拿出来,那这个呢,我们就不再一点一点写了,咱们怎么办呢?我们先尝试着把这里边的东西都拿出来,这里面可能有一些咱们是拿不到的,拿。
14:15
不到,我们是不是再进行进一步的处理就完事了对吧?拿不到我们再去关联其他的表等等等等啊好,那这个呢,我先呃把这里边的这个票号给它删除,走走走,CTRLF,我们搜一下,把后边的给它去掉,全部换成这个英文的逗号,CTRLCTRLC拿过来,拿过来之后呢,我们放在咱这个位置,CTRLV啊OK,那截止到现在呢,我们就已经拿到了,咱们相奈于所有的字段啊,当然忘了加那个date了啊来,右键我们列选模式,然后再往下翻,这里边呢,我们加上一个date DA,然后呢,Ta点就完事了,那右键再关闭那个模式啊好了,那在这呢,我们直接回车,它正常情况下应该是会报错的,对吧?里边有些字段咱们是拿不到的啊呃,哪个拿不到呢?在这儿呢,我们还得去对比一下,这个相对比较麻烦啊,呃,我就不再去对比了,我直接告诉大家就行了啊,首先我们proce ID这个肯定是拿不到的,对吧?前三个咱们是能拿到没问题,然后往下走date ID咱们能拿到,这个拿不到,但是我们能拿到一个cur time cur time,问下大家能不。
15:15
作为我们这个申请退单的时间能不能能这个没有问题,对吧,所以直接拿就行啊,所以他是OK的,没问题,下一个这个code肯定是拿不到的,我们把这个扣去掉,应该能拿到,Name应该是拿不到的,对吧?那这个同样的道理,把扣子去掉,这个name呢,给它注掉好,那完整往下走,这个应该是就有啊,这个也有,这个有剩下的这些应该都能拿到了,我们直接回车好,数据是不是能拿出来呀,对吧?好了,那接下来呢,我们就继续往下走,那也就是截止到现在呢,实际上这儿咱们拿到的就已经是全部的历史的推单操作记录了,OK,现在我们只需要去join一下其他的表,然后呢,拿到我们想要的这几个字段,那是不是就OK了呀,对吧?诶,这个相对是比较简单的,好,那首先我们先拿这个呃,Pro ID,这个pro ID肯定得来自于哪啊,肯定得来自于older in吧,对吧,这个没有悬念对不对?所以说在这儿呢,我们say了一下from o层的是不是INF对吧?那我们也是需要拿到它第一天的这个呃,分区对不对?然后呢,我们其实只需要拿俩字段就行了,一个是一个。
16:15
是ID得用用作关联对不对?还有一个呢,是province下IDOK,那这样一来我们就拿到了咱们所需的这个数据了,OK,那接下来再往下走,下边我们还需要再去照两张表,这两张表应该是谁?就是那个字典表了吧,对不对,这个字典表咱是不是也得照两次啊,对吧?因为我们需要拿两个表,这个我就不再去重复这个逻辑了啊好,假定我们已经把编码表也已经写好了,那接下来咱们需要干啥?是不是这四个子查询我们就给它装在一起啊,对不对,那我们以谁为主体呢?这回是不是应该以你这个退单表的这个子查询为主体对不对,他放在最左边,然后让其余的表呢,都跟他进行一个left John,对不对?那我们就能得到历史上的所有的,诶,这个退单操作记录了,那得到之后我们最终需要干啥?来一个动态分区吧,对不对,那动态分区用谁用它去做分区字段是不是就完事了,对不对?这个大家理解一下啊,行了,那这个我就不再写了,那现在呢,我们把最终的结果拿出来一起看一下就行了啊来走走走。
17:11
来到这来到这儿,CTRLC给它拿过来,拿来之后呢,我们把它放在这个位置CTRLL,好了,各同学,那现在我们一起看一下这个最终的circlef啊,看看跟咱们刚才写的是不是一样的,首先先看他的这个子查询,呃,他的这个子查询呢,首先先看第一个来大家看那这边呢,是不是直接找到了这张表对不对,完了之后呢,找到谁,是不是找到了咱们这张表的这个分区,然后呢,Boostrap in类型没有做任何过滤,对吧?是不是就相当于拿到了历史上所有的退单记录,对不对,找到之后往下走,下边呢,就是咱们那个刚才看到的older ino那张表,是不是他俩做了一个left,以上面那个为主啊对不对?那下边呢,就是我们刚刚看到的两个编码表,这个没什么可说的了,最终把数据都拿到,就可以用动态分区写入到这张表了,当然动态分区的呢,值它这用的是不是可time是没有任何问题啊,好了,那截止到现在首日装载咱就完成了,OK啊,那紧接着咱这样啊,我就不再单独录视频了,咱们把这个每日也给它做一下啊,这个每日呢,其实在这儿是不是也可以基于首日去改啊。
18:12
对吧?那接下来呢,咱们就一起把这个30号给它改一改,看看怎样得到最终的那个每日状待一句来吧,咱们一起看一下,呃,首先我先把这个标题改一下啊,把这个首日改成每日,下边日期呢,我们就得以15号为例的,对吧?来吧,开始改,咱们从子查询开始改起啊来先改第一个子查询,第一个查询来自于哪张表,O dso refund INF inform I z,对吧?那首先日期不用多说,咱们得改成15,对吧?然后呢,这张表我们从15号开始拿到的就是什么了,就是那个inser的以及update的操作了,对不对?好,那在这儿我们应该要哪种类型的,只要iner的是不是就行了,对不对,还需要加其他的过滤吗?不需要了,这个是相对比较简单,哎,直接就搞定了,好,那现在我们继续往下走,那下边这块呢。下面这个咱们应该拿什么。
19:01
啊,注意啊,就是这个是不是应该是oo info那张表啊,对不对,OK啊,那这张表你到了第二天之后,它里边就是什么了,就是一个一个的in inside update也是iner update的操作,对吧?那我们是不是得从这一堆操作里边去找我们想要的数据啊,对不对,OK,那咱这想要的数据是什么呢?想要的数据什么呢?这个道理很简单,嗯,咱们首先还是得明确,就是我们之所以会让上边这个紫察学跟他进行关联,那主要的目的是为了干啥?是为了找到我们前面的这个退单记录所对应的订单,进而拿到他们的provinced,大家说是这个道理吧?好,那现在咱们就来分析分析,那怎么能找到,我们只需要保证这样的一点就行了,这个子查询得能够返回我们上面这个,上面这个子查询返回的是什么?是15号的退单记录,对吧?没问题吧,也就是说咱们下面的子查群必须得返回15号的退单记录所对应的所有的订单。
20:01
没问题吧,那只要保证这一点就行了,对不对?好,那怎样能找到15号的退单操作所对应的订单,诶,哎,对,没问题啊,你想一想啊,就是我们前面已经分析过了啊,就是只要发生了一个退单操作,就会对我们order info这张表是不是产生一个update的影响,对不对?那所以说我们在这是不是找到15号的update,然后呢,进一步的来过滤的就完事了,对吧?好,那过滤怎么过滤呢?那咱们就得搞清楚这个update逻辑是什么对吧?那退单操作会对order for这张表产生什么样的update的影响啊,啊,因为也是状态修改对不对,那关键是它修改完之后的值应该是什么,这个咱得搞清楚啊,后段时间段对吧?他修改肯定是改这个字段,那改完之后的值是多少,来去看一下字典表啊,应该是什么来着,找一下应该是100几1005吧,对不对,我们这所谓的退单是申请退单对吧?只要那边申请退单,那我这个订单的状态就会变成说退款。
21:01
缓中的一个状态啊,没问题吧,所以说我们应该找首先修改的字段是older CS,然后改完之后的值得是1005这样的一个操作,对吧?得找这样的啊好,那现在呢,我们就改一下这个地方啊,首先我们先把十字改成15,那类型呢,我们应当改成update类型up data对不对?那完了之后呢,还得保证你修改完之后的值得包含olders,也就在这儿呢,我们快速的写一下啊,我直接先写对外层contains,然后里边呢,是不是map case啊对吧?然后里边呢,放上一个O,那之后外边应该判断谁是判断那个older下线SS啊,对吧?OK,那这个完成之后还得保证修改之后的这个older status的值得是1005才行,1005,好,那这样一来我们就能够找到上边的15号的退单操作所对应的订单记录了,OK,那找到之后我们这个procd就能够拿到了,诶这样一来咱就搞定了啊行,那他完成之后呢,我们再继续往下走,那下边这俩子。
22:01
群是不是就简单了,我们直接把日期改它就行,这个改成15,这个呢,咱也给他改成15,那应该就OK了啊好了,截止到现在呢,我们这个子查询就都改完了,最终我们再往上走,找到最上面的这个C大啊,然后呢,我们去给它调整一下,呃,这个咱们是就不能要了,对吧,给他直接删除,那完了之后呢,这儿这儿是给它改成一个零六杠幺五就行了,2020杠零六杠幺五,那其他的地方还用改吗?应该就不用改了,OK,那这个每日状态咱也就做完了啊,OK,视频我给他停一下啊。
我来说两句