00:01
好,那接下来我们看订单实时表的数据装载啊,那同样我们还是先来看一下它装载时的数据走向啊来点开这个PPT来大家一起看一下啊上边指代的就是ods层与订单相关的业务表,那当然这就是订单实时表的数据来源对吧?那下面呢,指代的就是订单实时表啊好,假定现在就是6月14号对吧?那我们来看一下在这一天咱们能拿到什么样的数据啊OK,在ods等等我们今天能拿到是不是全量的订单记录啊对吧?当然大家要注意一下了啊,这个全量的订单记录当中呢,包含完成的订单,也包含未完成的订单对吧?啊,那完成的订单呢,我是不是需要给它放到完成的那一天对应的分区当中,没错吧,未完成的订单呢?同样放到9999分区里,那所以说第一天的时候呢,我们同样需要用到动态分区。没错吧,啊,跟我们前面所讲的其余的累积型快照时表都是一样的,对吧?那好,那现在我们再往往后看啊,那随着时间推移来到了6月15号,那6月15号我们从ods层能取到什么数据呢?那我们只能取到新增变化的订单记录了。
01:12
对吧,那这里边儿有新增有变化啊,那同样道理,新增里边呢,有完成的,有未完成的,没错吧,所以这部数据呢,可能会写到999分区,也可能会写到完成的分区当中。没错吧,那除了新增是不是还有变化呀,对吧?变化指的是什么?变化指的是原来产生的订单在今天发生了变化,对吧?啊,大家要注意了啊,发生变化的订单一定是未完成的订单,对吧?啊,完成的订单是不会再发生变化了,没错吧?那未完成订单是不是都在999分区里放着?没错吧,啊,那也就是说9999分区当中的订单可能会在今天发生变化啊,那它发生变化之后,是不是就有可能会完成,当然也可能未完成,没错吧,那完成的订单呢,我是不是需要给他拿出来放到完成的分区里,未完成的订单呢,是不是还得再放回999分区,没错吧?那所以说我们每日装载的逻辑其实就是这样的。
02:08
OK,那这就是每日装载的数据走向,那后续每天呢,诶都是一样的这个逻辑了啊好,那这就是订单时值表它每一天装载时的数据走向。那接下来我们就开始编写这张表的装载语句啊,那我们打开this GR,那那它同样也是分为首日装载和每日装载啊,那咱先从首日开始啊,那假定今天的日期就是6月14号啊,我们再来明确一下啊,就来首日装载的具体逻辑是什么样的?好,那咱的具体逻辑呢,就是首先需要先从ods层拿到全量的订单记录,对吧?那这些记录里边呢,有完成的记录,也有未完成的记录,那完成了呢,我们需要给它放到它完成日期对应的分区当中,未完成的需要放到9999分区里。OK,那当然这里边呢,需要用到动态分区对吧?那这就是首日装载的具体逻辑啊好,那现在我们就开始编写这个circle课啊,那首先我们先来明确一下啊,咱们主要的数据来源是哪一张表,是不是应该是OD的older in four啊对吧?那当然分区呢,是2020年6月14号的分区啊好,咱们拿到,拿到之后呢,我们先尝试着获取咱所需的所有字段,也就是这些对吧?那需要处理一下,我这已经处理好了啊,咱CTRLC拿过来,嗯,拿到之后呢,放到这个select语句当中,好,那现在我们往前推一下啊来,大家注意观察一下啊,这里边有几个字段是取不到的,对吧?啊,那我们来看一下这几个字分别是啥啊来,那分别是。
03:39
Payment time cons time time refund time refund time。对吧?那你看这些字段是不是就是订单各状态对应的那个操作时间呀,对吧?啊,那这些时间字段呢,对于累积型快照时板来说呀,是非常重要的,那所以说我们必须得想办法把它们都获取到对吧?啊好,那接下来我们就来分析一下啊,那首先我们先来看一啊OD in这张表当中为啥没有这些时间字段,咱们去看一下,来点开它的建表语句,大家来看一下啊,大家注意观察啊,这儿有一个opera time对吧?那这个字段里边保存的实际上就是每个状态对应的操作时间啊,但是大家要注意了啊,Opera time这个字段呢,它只会保留最后一个状态的操作时间。
04:28
啊,这个具体的逻辑什么样的呢?我们来看一下啊,实际上它与这个字段呢,是相互绑定的,相当于是啊,只要订单状态发生变化,那opera呢,就会变成它最新的那个状态对应的操作时间。啊,但是大家要注意一下啊,我们要获取的是啥?我们要获取的是所有状态对应的操作时间,而不是只要最新那个状态的时间,对吧?啊,那所以说这个opera time呢,肯定是不能满足咱们的要求的啊好,那接下来我们就得思考一下了啊,我们到底如何去获每个状态对应的操作时间?来我们一起分析啊,大家来看一下这张表啊,这有一个slo啊,叫做订单状态流水表对吧?大家来还记得这张表当中保存的是什么数据吗?
05:14
啊,实际上这张表当中呢,它就保存了所有订单的所有状态以及其对应的操作时间啊OK,那接下来我们来观察一下这张表的表结构啊,我们先来明确一下啊,那它的每行数据是什么?它的每行数据应该是一个订单的一个状态对吧?啊OK,那接下来我们再看它的列啊,那它的列主要有哪些呢?哎,主要就是订单ID,订单状态以及这个状态对应的操作时间啊,没错吧,那这就是这张表的表结构啊好,那接下来我们再来分析一下啊,咱们最终期望的结构是什么样的?实际上我们最终期望的结果应该是这样的啊,应该满足什么呀,首先每行数据是一个订单。没错吧,啊,那它的字段应该有哪些呢?字段应该有payment time,有time,有finish time,也就是这些所有状态的时间,对吧?OK,那这是我们期望得到的这个结构啊,那显然这两种结构它是不一样的,对吧?那不一样,我们是不是就得做一个转化呀,对吧。
06:13
那在这儿这个转化应该怎么去做呢?来我们一起分析一下啊,那首先咱们的主体思想应该是什么呢?应该是一个聚合对不对,你想一想啊,那现在在这张表当中,那一个订单的多多个状态是不是分散在多行里边啊,对吧?那我们期望得到的结果是什么呀?是一个叮当的所有状态是不是都在一行里边,那显然咱这是一个多进一出的操作啊,也就是说一个聚合对吧?啊OK,那提到聚合呢,大家在这儿呢,呃,可能会想到一个函数,哪个函数就是collect set函数啊,那具体怎么做呢?哎,多学可能会想到啊,我使用collect set把同一个订单的所有状态对应的操作时间,诶,我给它放到一个数组里边,那这样一来是不是就能够把同一个订单的所有状态给它聚合到一行里边啊。
07:03
对不对,那接下来咱们看一看这样做可不可行啊来我们试着做一下啊来咱们select from应该是哪张表,应该是odis层的older state slog这张表对吧?那分居就是6月14号的分居,2020杠零六杠幺四啊没错吧,那刚才同学想的是什么?哎,这样去做啊,直接是不是得你得分组对吧?按谁分组,是不是得按照订单ID进行分组完之后呢,我们把呃订单ID给它选上来啊再把什么呢?再把所有的这个时间给它放到class当中,对吧?Co class完之后呢,把这个oper放进来。啊,大家注意观察一下啊,你放下来之后,咱们得到的结果应该是什么样的,我们执行一下。哎,大家来看一下啊,那现在我们确实是把同一个订单啊,它所有状态对应的操作时间都放在一行里边来了,但你想一想啊,那这是不是一数组啊,对吧,想一想我们一会儿是不是得从这个数组当中去分别获咱们想要的这个payment time cons time对不对?想想我们怎么获取啊?
08:07
那这个数组当中一共有仨时间对不对?那你怎么知道第一个时间是啥?第二个时间是啥,第三个时间又是啥呀?没错吧,那所以说咱现在呢,这个思路应该是不行的啊,那如果我们这儿要不是一个数组,那如果是一个map,那就好了,对吧,那是map的话,我我是不是就是KV的结构了,对吧?那我可以把谁作为K呢?诶把我们订单的状态作为K,那这个状态对应的操作时间作为V,对吧,KVKVKV,那这样一来我们在就可以分别去获取我们想要的支付时间,取消时间什么完成时间了。没错吧,哎,那接下来就来思考一下啊,咱们这儿能不能得到一个map呀。能不能找一个map呀?诶,其实是可以的啊,那怎么样得到这个咱们所需的map呢?那这里边我们需要用到一个函数啊,函数我们打开的官方文档,我们需要用到这个函数啊,叫做s tr to map啊看这名字我们就知道这个函数的功能了,对吧?是不是将一个字符串转换成一个呀,对吧?OK,那它具体的转换逻辑什么样的,其实很简单啊,那我们来看一下啊,那先看这个函数它的参数都有啥,那一共是三个,其中一个是B传的,两个是可选的啊,我们先看第一个,第一个呢,就是test,实际上这个呢,就是我们要转换的那个字符串啊,后边两个是啥?是两个分隔符,诶,那这两个分隔符是干什么用的呢?
09:31
来,咱来分析一下啊,诶想想啊,那如果一个字符串要想转成一个map,那你说它能是一个普普通通的字符串吗?那显然是不行的啊,它必须得是一个由特定分隔符分割的字符串。啊,那你想一想啊,这个字符串要想转成map,它得有几个分隔符啊,是不是有两个对吧?一个分隔符用来分隔K与V对吧?啊,那还有一个分隔符呢,用来分隔多个KV。没错吧,啊,OK,那这就是这两个分隔符的作用啊,好,那这个函数的这个用法咱们大家应该已经熟悉了啊,在这呢,我们就可以尝试着用这个函数去得到我们想要的那个map啊,当然呢,要想用这个函数,我们是必须得先得到一个特定的字符串啊,对吧?这个字符串呢,需要由特定的分隔符分割啊,OK,那所以说接下来我们要做的呢,就是先得到一个这样的字符串,好那接下来我们看一下怎样能得到咱们这个字符串。
10:29
好,我们继续往下进行啊,OK,那这个呢,我们就先给它去掉啊,这个咱们用不了现在啊,给它删除啊,那这个分组也给它去掉啊好,那接下来咱们就来分析分析如何得到这个特定的字符串啊。啊,怎么得到啊啊,那咱现在的数据是长这样的对吧?诶我们再重新查一下啊,咱现在的数据呢,实际上是长长这样的啊,那怎么样能够把这样的一个数据转成我们想要的那个字符串,然后呢,再进而转成咱们想要的map。怎么做呀?其实这呢,咱们可以这样做啊,我们可以先尝试着每一个的每一个状态的两个字段给它拼接起来,咱们用一个特定的字符串给它,呃,特定的分割符给它分割,那分割完之后呢,是不是能得到一个字符串啊,对吧?那接下来呢,我们再把同一个订单的多个状态以及其对应的操作时间给它聚合到一个数组当中,聚合到数组当中之后呢,我们再把这个数组里边的所有元素用一个特定的诶分隔符给它分开,那这样一来,我们就能得到最终的那个字符串了。
11:36
OK,那具体怎么操作呢?接下来我们去实践一下啊,好,首先咱们要做的就是将这两个字段给它拼接起来,这两个字段怎么拼?就这两个字段要拼的话很容易直接使用,说contact就可以了,对吧?那这里边我们先将older letters这个字段放进来,那这时候呢,我们需要给它放上一个分隔符,对吧?那咱放啥呀?那比如说放冒号啊,那完了之后呢,我们再来一个opera time啊,那接下来大家看一下我们现在得到的这个结果是什么样的啊,来,咱们回车。
12:03
好,大家注意观察,你看啊,我们现在是不是就是已经将状态以及其对应的操作时间拼接在一起了呀,对吧,但是大家注意观察一下啊,咱们这用冒号行不行。显然是不行的,为啥?因为我们后边的时间里边是不是有冒号了,对吧,那这样一来我们一会儿解析的时候是不是就搞乱了呀,对吧,所以在这呢,咱们就不能用冒号了啊,我们换一个,比如说我们用等于号啊,用等于号啊好,那我们再执行一下。OK,那这就我们现在得到的结果,那得到这个结果之后,咱接下来怎么做,接下来我们需要将同一个订单啊,它对应的这个状态和操作时间,是不是给它聚合到一个数组当中,没错吧,那聚合数组用谁,是不是用克莱塞对吧?那所以接下来我们用格Y格Y谁O的ID。把后边删掉啊好,那现在我们把上面的这个字符串放到一个collect的数组当中,Co完之后呢,给它放进来,好,那接下来我们再来看一下现在的结果是什么样的。好,大家注意观察,那这就是我们现在聚合之后的结果了,你看啊,这是一个订单对吧?那后边呢,就是这个订单所有的状态以及其对应的操作时间,对吧?其实这个已经比较接近咱们最终的结果了,没错吧,我们最终想要的实际上是一个字符串,但是现在它是一个数组,那所以说我们接下来要干啥?我们接下来是不是需要将这个数组当中的每个元素用一个分割符给它拼接起来,然后组成一个最终的字符串啊,对吧?OK,那这时候我们可以用谁?是不是可以用con with这个函数啊,对吧?好,那现在我们再把它,诶给它放到contact with当中来,我们执行一个contact with函数完之后呢,这个函数需要传两个参,对吧?第一个参数用谁?是不是传一个分隔符,第二个参数就是传我们那个数组就行了,对吧?那OK,那这个函数正好能解决我们现在的这个需求,对吧,那我们呃,这个用什么风格呢?就用逗号就可以啊好,那我们再把这个数组放进来,那接下来我们再执行一下这个诶,Circle。
13:55
来大家注意观察,好,那刚才的那个方括号是不是已经消失了呀,对吧?那咱现在呢,就已经得到了一个我们所期望得到的这个字符串,没错吧?好,那字符串咱们已经得到了,那接下来我们就只剩下最后一步了啊最后一步干啥?是不是将这个字符串转成一个map呀,对吧?那怎么转CTRLX,我们来一个s tr to map啊,那这个函数呢,需要传三个数对吧?那第一个就是我们要转换的那个字符串啊,那OK,第二个呢,第二个呢,是一个分符啊,注意第二个分隔符是谁啊,第二个分符分隔符呢,是多个KV之间的分隔符啊,是多个KV,那咱们这应该讲是不是就那个逗号啊对吧?那第二它就叫逗号,那第二个那个分隔符呢,那肯定就是谁,就是K与V之间的对吧?那就是等号,没错吧?那接下来我们再来看一下咱们得到的这个最终结果是什么样的。
14:45
好,我们执行一下,好大在现在再来观察啊,我们现在是不是就已经得到了一个咱们想要的map了呀,对吧?啊,那这个时候呢,我们就可以根据map的K去获去获取我们想要的那个value了,OK,那接下来我们再来做最后一步啊,那现在我们以它作为一个子查询ctrl xa括号。
15:05
好,我们现在回车来,我把这个往前推一下啊,那这边咱们起一个别名啊,这个字段起个别名,我们需要用到它啊,来在这。他叫TMS啊,那接下来我们再给这个子查询也起一个名,比如就起一个T1吧,啊,现在我们从这个T1当中去选择我们每个订单,每个状态对应的操作时间,好select from它那完之后呢,我们首先需要把OID选出来,那接下来呢,我们需要选一个TMS对吧?TMS这这是一个map对不对,怎么从map里边取值啊,怎么取啊,是不是就根据它的K取值就可以了,没错吧,那这里边我们注意啊,我们要获取的第一个时间是谁?是payment time对不对?那payment time它所对应的那个status应该是什么呀?我们去看一下,看一下这个码表应该是谁,是不是应该是1002对吧?那现在呢,在这儿呢,我们就来写一个102就可以了,来1002 OK,那这个咱得到的就是啥,就是这个所谓的payment time,来咱给它拿过来啊,CTRLV,好,那接下来我们继续往下进行,来我CTRLD吧,CTRLDCTRLDCTRLD啊,那我们依次需要获取1003 100S4啊,还有1005,最后一个1006啊,那当然呢,我们这里。
16:13
边的,呃,这个别名要改一下啊,那第二一个呢,应该是console time来,咱给他拿过来CRV,那再下一个呢,是finish time来拿过来。CTRLV,那再继续,这个是refund time,咱也给它拿过来,CTRLV,那再继续,这个是refund finish time来,咱也给它放在这。OK,那这样一来的话呢,我们就能够拿到每个订单啊,它对应的每个状态的操作时间了,好,那现在我们把这个最终的结果执行一下。好,那这就是我们得到的哎,最终结果了,OK,那OK,那接下来我们再继续往下进行啊,那下边咱们要做的应该是啥呀?啊把这个字段咱先去掉啊,下边应该是啥呀,下边应该是把这两个子查询给它关联起来啊对吧?关联起来我们就能得到所有字段了,好,那现在我们实际的操作一下,那要关联我们先给他们每个人起一个别名啊来CTRLV,那这个呢,我们就为OI就可以了,来它是OI,好,那接下来我们继续,那这个呢,我们称之为log吧,啊,因为它是从日志表当中获取的,对吧,Log表啊来我们继续,那这个呢,我们称之为log。
17:21
Older对吧?好,那接下来我们要做的就是把起来我们一个left,好,那条件呢,应该是on,应该点ID等于log.o.ID对吧?嗯,来,咱们给它写上好了呢,现在我们就把这个两张表照到一起了,接下来我们就可以从中选择咱们所需的所有字段了,好,所有字段我们去拿一下,来,CTRLC拿过来,拿过来之后呢,放在这个位置啊,嗯,来TRLV,来,这个呢,我们往前推一下。好,那我们再把这个circle执行一下啊。OK,那这就是我们得到的最终结果了啊好,我们现在继续往下进行啊,结果得到了之后呢,我们需要使用什么呀?需要使用一个动态分区,把这个结果是不是insert到我们最终的这个DWD层的订单表当中啊,对吧?那所以在这儿呢,我们需要补上一个insert or right table,应该是DW in partition,那因为我们要用到动态分区,对吧?所以这呢,我们只写DT就够了,没错吧,那接下来呢,我们还得再多选择一个字段作为动态分区的值,对不对?那关系这个动态分区的值咱们应该怎么写?
18:30
啊,像这个呢,还是有点麻烦的啊,因为刚才我们分析了啊,就是订单完成的标志实际上有好几个对吧,我们刚才分析了一共有四个对不对,那分别是哪四个呀?啊,那一个是订单取消啊,一个是订单超时啊,一个呢是订单确认收货后七天内未发起退款对吧?还有一个呢是退款完成。啊,OK,那所以说我们在写这个时间的时候呢,那可能是什么?那可能是取消时间,可能是超时时间,对吧,也可能是确认收货的七天之后的那个时间,对吧?那也可能是退款完成时间,那所以说这个逻辑呢,相对来说是比较复杂的啊那在这儿呢,我们可以使用这个K4问去写这个时间啊,那在这呢,我们用K4问。
19:14
C啊,那先把这个框架搭起来啊,那这应该是摁的,那里边呢,是不是就是问什么什么,问什么什么呀,对吧?那接下来咱们开始写啊,那这里边具体怎么写呢?首先我们先看第一个啊,问问什么呀,问console time对吧?那is not not,如果它不为闹,就说明它取消了,对吧?那这时候我们就then then什么呀,这咱们需要格式化一下date format,然后呢,把这个consotime放进来,那后边呢,我们需要给它格式化成年,然后呢,月啊,大写啊。MM,然后杠DDOK,那这就是我们的第一个诶条件,那接下来我们再看第二个判断条件啊好,那第二个判断条件呢,是确认收货后七天内未发起退款对吧?啊,OK,那接下来我们分一下这个判断条件应该怎么去写啊,那既然确认收货了对吧?那所以说非内HM是不是就不能为no啊,对吧?那所以说我们现在先写第一个条件,就是finish time is not now。
20:11
没错吧,那我们继续啊,那未发起退款对不对?未发起退款那就意味着refund time,它得we now才行对不对?那所说按一下refund time is no,没错吧?那现在我们就能认定这个订单已经完成了吗?诶,不是这样的啊,那我们还得有一个条件,什么条件呀?啊,就是这个状态啊,它得持续超过七天,是不是咱们才能认定他已经完成了,没错吧?那也就是说确认收获的时间距今得超过七天才可以啊,那具体就是怎么写呢?具体其实就是呃,这个收获日期加上七天,然后呢,得小于等于今天的日期才可以。没错吧,那日期进行加减,我们应该用哪个函数啊?是不是可以用data塔I的函数,没错吧?那所以说我们再补充一个条件啊,就是data塔嗯,I的,那当然对谁加,是不是对这个非time加上七天啊对吧?那在这呢,我们需要对这个日期呢格式化一下,来一个data for的把谁放进来,把这个非呃,Time放进来,格式化成年月日的格式YY,然后杠,然后杠DDOK,那格式化完之后呢,我们需要给它加上几天,加上七天对不对啊,那这个日期需要怎么做,需要小于等于咱们今天的日期,今天呢,就是2020杠零六杠幺四。
21:28
OK,那这样一来呢,我们才能认定这个订单呀,他已经完成了啊,那后边所以说我们就来一个Z,那这个数据应该放到哪一天呢?是不是应该放到确认收货七天之后的那个日期当中啊,对吧?OK,那现在我们把这个日期拿过来,其实就是它对吧?来CTRLC啊,那就是Z这个日期啊。好,那第二个条件我们就完事儿了,那接下来呢,我们再看第三一个条件啊,像第三一个条件就简单了,我们去看一看它有没有退款完成,对吧?那所以说有的话,那我们就放到退款完成的那个日期对应的分区当中,那所以咱可以把这个复制一下啊,CTRLC拿过来啊,拿过来之后咱们给它改一下,把谁把这个console time是不是改成这个refund的finish time就可以了,Re啊fun finish time,好,那当然这儿要改,后边其实也是要改的,对吧?啊controltr v,好,那接下来我们继续最后一个判断条件,那就是啥呀,是不是就是呀,对吧,所以说跟这个一样啊,我们也是可以复制一下啊,CTRLC,那我们拿过来,那CTRLV,那把这个time呢改成就可以了啊,CTRLC拿过来把后边也改一下啊。
22:31
好,那这四个条件咱们就都写完了啊,如果四个条件都不满足,那就说明什么,那就说明它未完成对吧?那所以说我们最后来一个else else放在哪个分区啊,是不是放到9999,然后杠九九杠九九这个分区。啊,没错吧,啊,OK,那到现在为止我们就完成了啊,这个订单时表的首日装载的SQ语句,那接下来我们再来看它的每日装载啊,我们往下翻啊,那假定今天的日期就是2020年6月15号了啊,那接下来我们来分析一下我们每日装载的逻辑应该是什么样的。
23:06
啊,实际上每日装载的具体逻辑应该就是这样的啊,首先我们需要先拿到订单事实表,原来的9999分区的数据,那这里边存放的是不是就是所有的未完成的订单呀,对吧?然后我们再拿到今天的OD层的新增及变化的订单数据,那他俩呢,需要做一个全外联。没错吧,全外联之后呢,我们需要获取所有的订单的最新状态,没错吧,那除其实就哪部分呀,实际上就是这一部分,然后再加上哎,这一部分。没错吧,那这两部分数据咱们拿到之后呢,诶,我们就可以把这两部分的数据呢,再给他insert override回订单时表里边了,没错吧,那我们现在就用新的状态把旧的状态给覆盖了,对不对?那其实相当于我们就完成了一个修改的操作。那大家都知道啊,那这个订单的最新状态,那肯定有完成的状态,也有可能未有未完成的状态,对吧?那所以说这个数据呢,也可能会写到两个分区里边,那所以说咱们insert or right的时候呢,需要用动态分区,OK,那这就是我们每日装载的具体逻辑啊,好,那现在我们就开始编写这个circle了啊,首先我们先获取我们所需的两部分数据,那首先select from应该张表,应该是DWD层的older对吧?那这里边我们需要获取它9999分区的数据。
24:24
没错吧,那现在我们把它里边所有的字段全部拿过来啊,CTRLC。来放在这个位置,那CTRL位好了,我们已经拿到这个第一部分的数据了,那其实这个就是啥,这就是我们之前的那个,呃,所谓的什么呀,所谓的O对吧,来给它放过来。来往下推啊,那old咱们拿到了之后呢,我们再去获取那个new啊,再去获取new,其实这个new呢,我们没必要再手写了啊,其实咱们可以,呃,以谁啊,以咱们每日装载SL为基础,咱们给它改一改,其实就可以了啊好,那现在我们去获取一下,那咱们第二一部分数据啊,我们先把这个这部分内容拿过来,好,我们放在这个位置。
25:03
大来看一下,看一下我们拿到的是哪些内容,首先第一个啊,我们是不是先从OD层这个表当中拿到了它所有的字段呀,对吧?当然这个我们每日装载,我们应该从第二天开始,对吧?所以这儿呢,应该是15号,没错吧,那拿到之后呢,我们是不是同样得从order status logg这个表里边去获取咱们所需的那些时间呀,对吧?那当然这个分区呢,也不是14了,而十几啊,而是15,但实际上这个获取逻辑是相同的啊好,那咱现在是不是已经拿到了我们所需的两个紫砂血量呀,对吧?那当然我们需要从这里边选择咱们所需的所有字段,那select一下s c select,然后from from下边,那当然这个字段呢,我们也是需要所有的字段啊,CTRLC拿过来。来放在这个位置CTRLV,好大家来看一下,那实际上现在咱们select出来就是啥呀,就是咱们那个所谓的new的那个自查询啊,好,那现在咱们给它放在一个括号里,然后起一个别名。再CTRLV,好,那这就是我们得到的这个啊。
26:03
好,那得到new之后,我们接下来要做的是啥呀?是不是让这个new跟这个old做一个全外联呀,对吧?那所以我们继续往下进行,来一个全外联。UR。好,那连接条件应该是啥?说明应该就是old.id等于new.id呀,对吧,那个on old.id等于哎,这个new.id。好,那完之后呢,我们再从这里边去选择,哎,咱们所需的结果select。From啊,OK,那咱们选择最新选择这个结果的时候,是不是要选择每一个订单的最新状态呀,对吧?啊,那具体怎么选择呀,是不是又使用NVL那个套路啊,对吧?那所以在这呢,我就不带一点点写了,我们去拿一下文档当中的结果,OK,其实就是这一堆东西。来,CTRLC拿过来来,放在这儿。瑞来,大家一起观察一下,我们这儿是不是就能够使用NVL去获取到我们所需的这些订单的最新状态了呀,对吧?那OK,那获取到之后我们就只剩下最后一步了,下边干啥?是不是使用动态分区将数据写到DW do对应的分区当中啊,对吧?那既然是动态分区,所以在这儿了,我们只写一个DT就好了,就OK了,那接下来就是啥呀?就是下边的这个动态分区做的值了啊,那其实这个值跟我们首日装载的那个逻辑其实一样的啊,咱把它拿过来就可以了,CTRLC。
27:19
啊,当然拿过来之后呢,有些地方咱们需要去改一下啊来,我们放在这个位置CTRLV啊在这咱们需要改啥呀?哎,实际上我们需要去改一下这几个时间,对吧?大家注意观察,现在这是不是有奇义啊,对吧,为啥呀,因为下边old和new里边是不是都有这几个时间,那应该选谁,那应该选谁,是不是应该选择NVL之后的结果,我是不是得用这个最新的这个时间去作为咱们分区字段的值啊对吧?那所以咱这给它改一下就行了,把这个constant改成啥,是不是改成NVL诶代对吧?来把它拿过来,那CTRC放在这ctrl a,那同理这个也要改一下,那继续往下进行,呃,这个是finish time对吧,咱们也拿一下finish time,那就是它啊CTRLC拿过来,放在这CTRLV,那这个呢是refund time对吧,一会再改,我们先把finish time改完啊好,这个已经完事了,那接下来我们再拿一下这个,呃,Refund time来找到它。
28:12
来CTRLC把它替换一下。好,那最后呢,我们再来替换一下这个finish refund finish time啊来找到refund finish time来CTRLC来给它放在这儿CTRLV来再来一个CTRLV,好,那接下来还只只差最后一个了,就是一个spare time对吧?啊,我们来把一个time替换一下。来拿过来CTRLV,那这个呢,CTRLV啊,OK,那到现在为止呢,哎,我们这个每日装载的S核语句也就编写完毕了啊好,那这就是我们的DW do这张表的数据装载的全部内容。
我来说两句