00:00
来,来到咱们这个,呃,这个RI当中啊,那我们现在要做的一件事跟上午一样,咱们上午第一件事干啥?是不是得先找到我要修改的那几个分区啊,对不对,那咱现在也是要找这个啊,那开始找吧,来我们select啊,要找修改的分区应该从哪张表,是不是应该从DW def fact order in four当中去找,对不对,是不是应该是也是找几个分区啊,所以是这个,哎,过滤条件应该是where dt是不是也是in啊,也是in啊,在in后边呢,咱们也是来一个自查询,来自查询好,那这里边怎么写呀?那是不是应该是从咱们这个ODI层older in这张表里去找当天的新增极变化呀,对不对,那select,那比如说我们应该需要的是。应该是create time对吧?啊create time,然后辅哎,ODS哎,Or in for哎,这是我们要拿的,当然这个日期得过滤一下啊,2020啊,杠零六杠幺四是不是这样一个逻辑啊,当然这个日期咱们需要怎么做处理一下啊,它也是daytime类型,咱们需要data format啊,把它放进来,然后逗号啊,来一个YYYY杠大M大M,然后杠DD。
01:09
对吧,那这就是我们获取到的我们将要修改的那几个分区的啊,那个DT字段对吧?啊,VR dt in,那我就能把这几个对应的分区找到啊,那找到之后呢,我需要把这里边所有的字段是不是都查出来,那咱们就查呗,啊去查一下所有字段啊,这个这个所有字段呢,是不是就是这张建表里边的这个建表语句当中所有字段呀,这个咱们就不再手写了啊,我粘一下。这个有点长啊,粘一下找到我那个我所需要的这字段啊,就是这个。来从这到这儿啊,CTRL啊C咱拿过来。放在这CTRL好,那大家现在呢,应该,诶我这少粘了吧,啊少了个T是吧,那一会把这个T给它补上啊。走啊amount啊好,那这样一来我们就拿到了我们所需要修改的所有的分区,对吧,这个其实就是咱们那个所谓的什么呀,所谓的老数据对吧,咱们起个别名叫做old,这是不是也要做一个自查询啊,一会因为要for嘛,啊来咱们起别名叫old。
02:15
CTRLV啊来把这个往前推一下。Ta啊,好,那这个呢,我们起名叫O。呃,那order完之后呢,咱是不是得有这个new啊,对吧?那这个order info new来自于哪?是不是来自于ods层order info啊,那所以说我们下一个子查询就是select星啊,然后from ods o info,然后日期呢,咱们得过滤一下VRDT等于2020杠零六杠幺几哎幺四啊杠幺四,当然咱这呢不写贼赖星,写的贼赖星呢,那咱们这个看不了具体字段,咱把那个具体字段咱们去找一下啊,那找一下咱们是不是得找older in for这张表啊,是不是就在这啊,那咱们把这个字段是不是都得粘过来。
03:00
啊,都拉出来之后呢,我们退一下啊,来放在这儿,那放当然放这儿之后呢,我们这儿呢,呃,需要去把这个这些东西是不是都处理掉啊,咱们先不处理啊,咱们先注意观察一下啊,那一会这个是不是咱们的new,那这个是不是咱们的old,那正常一会咱们old和new需要怎么做呀,是不是需要做for auto draw对不对。然后做further job的时候呢,咱们需要怎么做,是不是需要一个字段一个字段的去比较啊。对不对,你看上午,上午咱们写那个,是不是每个字段咱们都进行了新旧的对比。啊,那你看一下啊,咱们这张表如果也做新旧对比的话,你看它能对比上吗。啊,这是我们那个old对吧,Old咱们不说是不是有这么一大堆字段,那你看用。很显然这个new里边的字段要少一些吧,是不是看来要少一些,对不对,那这时候呢,咱们把呃,文档上那个字段粘过来啊,粘过来我看啊,文档在哪呢?在。呃。他这还没有没有,咱们先那个自己修改一下吧,这个快速修改一下啊来我们把这个。
04:04
这都删掉啊,都删掉来。这写词课其实有时候就确实比较,呃,就是比较麻烦,你需要写好多字段啊。当然现在咱们还有文档可以复制粘贴,对吧,你到到到公司自己工作的时候呢,那这些字段自己敲呗,就得啊一点点。嗯。来,那我们把这个拿过来啊,诶最后一个就不要了,那前面还有那个标号是吧,所有票号呢,咱们都去掉,这个应该是摁着什么呢?Alt ctrl alt往下拉是吧。Out out什么来着?Out shift吗?直接out是吧啊。这样也不对呀。啊,这out是吧?啊问的是CTRL,哎,行那就行了啊,这个比较方便了,来我们把这个删掉好,那这是我们拿到的这个相当是new字段对吧?来我们把它放到一个这里边。放在一个查询里。啊。
05:02
来咱们type一下啊,很显然很显然你会发现这个东西呢,呃,咱们如果给它就叫做new的话,这很显然这个新旧对比的时候,我这俩字段是不是不一致的呀,不一致你是不是就没有办法一个字段一个字段的去比呀,对不对,咱们可以先看一看啊,他们俩差的这个字段主要差在什么地方了。主要差在哪儿了啊,咱们对比一下啊,我把这个截个图。啊,F3来,咱们上下对比一下,主要差在哪了?主要是不是就差在这一大堆的时间上面了呀,对,但是你要知道我们要改的话,主要就是改啥改主要就是改时间,结果你这个new里边呢,你没有这么多的时间。对不对,那就好像一下就凉凉了,这条路感觉被堵死了一样,对吧,那没法改了。这怎么搞?其实大家可以呃理智的分析一下这个现象啊,就这个现象出现也是相对也是必然的,也是必然的,为什么必然的呢?想想啊,咱们这种这么多的时间是什么什么表的特点啊,是这个累计性快照事时表的特点,对吧?事时表是不是属于维度模型的概念啊,那咱们关型数据库是关维度模型吗?那是维度模型啊对吧?那维度是是关系模型啊,是关系模型,是关系模型,那关系模型呢,根本就没有实时表,所以说是不是根本就没有这种这种这个表的这个格式啊,对吧?啊,所以没有这么多字段很正常。
06:32
啊,那虽然是很正常的事儿,但是我们呢,我们现在要解决这个问题。啊,咱们得解决这个问题。咱们这个new里边是没有这么多时间,没有这么多时间,但是我是不是得想办法找到这么多时间,然后再去跟他进行比较啊,对不对,那怎么去找这些时间。嗯,这些时间都是什么时间呢?大家觉得这都是啥时间,这是不是应该是我们一个订单的所有状态的时间呀,对不对,就是什么时候下的单,什么时候支付的,什么时候完成的,是不是应该是找每一个状态的时间呀,对不对?咱们每个状态的时间在这张表里是不是没存,他们只存了一个opera time,这个op time也是一个时间。
07:18
那它具体是哪个状态,咱们知道吗?不知道,那这个咱们只知道啥。只知道它,它相当于什么,就是你这个一天当中,你这个订单的最后一个状态的时间是op time。对不对啊,只要这个,但是你也不知道他到底什么状态,这个不行,用不了这个字段,那咱们怎么去找每一个订单的所有状态的时间呢。去哪找?去哪找啊?嗯,哪张表。订单详情啊,Older detail是吗?Older detail表里有啊,Order detail表里好像根本就没有时间吧?O detail就这张表呗,啊,这个连接又断了是吧,我还S这个挂了呀,S一下啊,哎,没起啊,就就上午我关机了,应该是我重启了一下,这个没有了啊。
08:11
啊,咱们让他取一下吧,那我们看MYSO里边吧,MY不是一样的,Order detail里边有吗?刷新。啊,这就order detail啊。那那这里边儿有这个什么时间吗?根本就没时间对吧,那根本就没时间。那这肯定是不行的,哪去找每一个订单所有状态对应的时间呀,哪去找啊?是不是有一个older status log,大家还记得这张表叫什么表吗?这叫订单状态流水表,或者叫订单状态日志表,对吧?那这张表里边记录了我们每一个订单的所有状态对应的时间吧?那咱们打开看一下这张表啊,打开你看这张表当中它的字段是什么样的啊,首先这有一个主键啊,这个不用看,咱们主要看后边啊,后边是不是有一个older ID,有一个older status,还有一个op time。
09:12
啊,那相当于大家要明确啊,我们这一行数据应该指代的是什么呀。一个订单的一个状态吧,对不对,也就是我订单,其他订单只要呃,他的状态发生变化,就会往这里边插一条数据,只要发生变化就会往这里边插这个数据,也就是这张表里实际上记录了我们所有订单的所有状态。啊诶,那在这儿是不是就能获得他们的时间了呀,对不对啊,那首先大家得知道这个orderl这个字段是什么意思啊,Order是不是订单状态,然后这个1001 1002103,这都指的是什么来着?是不是在base dic里边能看出来啊,来看一下101指的是已未支付,零二是已支付啊,已取消,已完成,退款中,退款完成,是不是有这样的几个状态啊,是这样的啊,那所以这里边有解释,那这个就相当于每个订单的每个状态所对应的时间。
10:00
啊好,那是不是现在感觉找到一根救命稻草啊,哎,这一块能找到我们所有订单的所有状态时间啊,OK,那现在问一下大家啊,咱们虽然拿到这个每个订单的每个状态的时间了,那咱这个数据到底应该怎么使用?怎么使用,就是我是不是得在搜狗当中,我我得用它呀,对吧,那咱们怎么用它呢。啊,咱们怎么用。啊,怎么去用它。怎么用呢?嗯,琢磨琢磨啊,这块怎么搞这个事。首先咱们来分析一下啊,咱们这里面刚才说了,我这张表当中啊,我们应该是什么,是一行数据,就是一个订单的一个状态,对不对啊,那也就是说我同一个订单的所有状态是位于几行的呀?是多行的,这个你可以怎么看咱这儿呢,我呃,我把同一个订单的数据,我给它放一起啊,咱们后边加一个order by对吧,来order order by谁order ID是不是就行,来咱们运行一下走。
11:11
好看一看啊。诶往上拉啊完了,然后后边呢,再来一个这个,呃,Or DR status吧,来order status好来我们这个运行一下。啊,大家看一下啊。啊。这三条数据。这属于什么呀?这属于是不是同一个订单的三个状态,以及它所对应的时间,但是咱们这个时间是自己生成的,都是一样的,这个无所谓,你忽略就行啊,是这样,也就是咱们这个数据呢,是这样的一个状态啊,咱们先搞清楚。然后呢,我们在这个写的咱们这个更新数据这个SQ里边呢,我们这个old和new进行全外联的时候呢,你得保证什么呀。这不,这是一行一行的去比啊。对不对,就是同一个订单啊,在old当中,我是不是一行数就是一个订单,在new里边我也得保证什么呀,也得保证一行数据是一个订单吧,对不对,是不是这样之后呢,他他们才能是一个订单,就是相同的订单进行前后的新旧对比啊啊有这一行一行的去比。
12:16
啊,那咱们现在要做的事应该是什么呢?是不是应该是想办法啊,将什么得将同一个订单的。播客状态以及其对应的时间得得怎么样啊?是不是得从多行得聚合到一行里边?对不对,你得聚合到一行里边,你才能去跟咱们那个old去进行主行的对比啊,你得想办法给它放到一行里边。是不是这个道理啊,哎,那咱们问一下大家啊,这块咱们怎么能够将这个。多行数据啊,给它放到一行里边。哎,多行放在一行里边,这个是不是肯定是聚合呀,对不对,那这个怎么可以放到一行里边啊。
13:00
啊,怎么放到银行里用谁。用函数呗,聚合函数呗,对不对,那用什么聚合函数。用什么浇汗水?用啥呀?嗯。将多行数据放到一行里边,咱们可以用啥?对吧,啊也能想到用塞是不是你可以把哎多行数据我放到一行里边,然后呢,是不是给你返回一个啥,返回是啥呀,数组吧,它返回数组啊数组那OK,那问一下大家,你说咱们这儿呢,应该把哪个字段放到这个class塞函数里边呢。谁呀,是不是这个时间呀,对吧?啊,哎,那咱们来思考一下,看时间行不行啊,那也就是说一会儿呢,你需要怎么去处理,它应该按照,因为是分组,因为是一额函数嘛,你得分组吧,按这分组,按照ID分组,这是肯定的,对不对?然后呢,把op time放到class这个函数当中,那OK,它会给你返回一个什么样的结果,你答ID后边是一个数组,数组里边是不是有咱们每一个状态对应的时间呀,哎,时间。
14:10
诶,这个看似好像实现了,刚才咱们那个效果啊,就是把一个订单的所有的状态时间放在一个,放在一行里边,诶没错,但是你要想一个问题啊,你放在一个数组里边行,但是一会儿你看你能用不。一会咱们要跟那个old去对比的时候,是不是得一个字段一个字段的比,哎,New的cur time old的cur time new的这个payment time,然后呢,这个哎,Old的payment time,你是不是得这样一个一个去比,那你现在把这一大堆时间放到了一个数组当中,我现在想看一下,比如说我要比那个cur time,你得给我把那time拿出来吧,那谁是cur time啊?谁是啊,是不知道是谁啊,你那只是一个数组,里边有有几个时间,你也不知道到底是什么状态对应的时间,所以这个还真不行。这个是不是不行。
15:00
啊,那不行的话,那怎么办呢?也就是咱们现在得时间一这样的效果,OK,你得把这多个时间啊放到一行里边,然后呢,你还得能够拿出来才行啊,我拿Korea time你就得拿time啊,我拿payment time你就得拿payment time是不是应该是这样的呀?啊这个怎么办?这个克莱的好像不好使了啊。其实咱们这只其实就差一个东西啊,差一个什么东西啊,差一个标识对不对,你把这一堆时间放进来了,如果说我要再有一个标识,那就好了,对不对,有一个什么标识,比如说啊,就是就是对应的状态呗,对不对,这是支付未支付状态对应的时间啊,已支付状态对应的时间。是不是应该是有一个这样的东西,这个东西就好用了呀,就那我想拿什么时间就拿什么时间,是不是,哎,那咱们这应该用什么数据类型去存储这样的数据呢?哎,对应map部需求比较合适的对吧?啊那咱们有K有V,那K是什么呢?K就是对应的状态,V是啥?V就是这个状态对应的时间,没错吧?哎,那有有一个map就好了啊哎,那我问一下大家啊,咱们map怎么能得到一个map呀?
16:13
能不能到一个map。嗯,有没有写过这类似的这个东西没写过是吧?啊,那以后咱们工作的时候也也很有可能会遇到这种情况,哎,我想得到一个麦吧,但是我不知道怎么得到,那这时候怎么办呢。诶,你你就得去网上去搜这个相关的有没有相关的函数,如果是真没有的话,你就得自定义了,对不对,那咱们看这有没有呢?我们CR来搜一下啊,这是我们刚才在呃搜的这个have functions have的这个函数嘛,这是have官网上对它这个所有函数的一个介绍,那这里边呢,咱们就搜啥呀,你就搜map啊,搜map啊,当然呢,你搜map的话,这个这个东西比较多,你就一点点看呗,来咱们比如说这这也搜到了一个map对吧,不过这是map是返回map吗?这不是,这是把map给这个explode对吧,你可以给他A瑞,也可以给他map啊,那我们当然我们接着往下搜就行了呗,诶这这是一个什么。
17:07
诶,这是一个map的constructor构造器,对吧,再往下能得到map,但是这个map你就要怎么做,你要给这个函数里边传K1V1 K2V2 K3V3,你是不是得手写呀,那咱们这适合手写吗。那适合手写吗?咱们这不太适合手写,为什么呀,因为咱们这你后续你这个应该怎么得,是不是应该是分组聚合呀,对不对,你这个每一组有多少个K,有多少V,是不是都不确定呢,对不对,所以说你这没有办法一个一个去写啊,所以这个不行啊,那看有没有其他的呢,走。走这个不是。你就往下翻呗,哎,往下翻,那这里边儿呢,咱们还是呃,没有找到啊,这是这个是返回值类型啊,这返回类型这个都不是啊,那接着往下走啊,你就往下翻。来这儿又找到一个,那这第一列是啥?第一列是不是返回值类型,这是返回类型,第二个是函数啊,那咱们找到有一个返回值类型为map的啊,然后呢,你看一下这个函数是什么?是str图map对吧?S tr map很显然看明就能看出来,这就是将一个string字符串成一个map吧,对不对啊,那咱想问一下大家啊,如果说呃,咱们不告诉你这个函数怎么用啊啊,你想一想,一个普通的字符串我能转成一个map吗?
18:26
能转成吗?肯定转不了啊,一个普通字符串abcd,你给我转一个map,咋转呀,是不是不知道咋转,那你要能够转成map的字符串,那肯定得是特殊的字符串啊,怎么特殊啊,肯定是以固定的分隔符分隔的啊,那你需要几个分隔符呢?两个啊,为什么两个呀,因为你是map嘛,Map首先你K与V之间是不是需要一个分隔符,那多个KV之间是不是也需要一个分隔符,对不对?哎,那你看这个函数,它其实就是这么去设计的啊,你看这个函数咱们用的时候呢,需要给它传三个参数,那第一个参数就是你的字符串,第二个参数是一个分隔符,第二个呢,也是一个分隔符。
19:08
啊,这俩分隔符分别就是K与V之间的分隔符啊和KV之间的分隔符。啊,是这样的啊,那这也是一个函数,哎,你说咱们这儿能不能尝试一下用这个函数去实现咱们的功能啊,哎,也就是说咱们要想用这个函数,你只需要给它准备一个什么就行了。准备一个字符串就行了啊,这个字符串呢,得是固定的,呃,有两个分隔符分隔的对吧?啊,那咱们来看看这能不能实现啊,来看一下。那我们这其实想到的一个字符串应该是啥样的呀?啊,这个字符串应该是这样的,应该是这个作为K吧,K1,然后V1K2 V2K3 V3是不是应该这样呢?啊,那咱们能不能得到这样的字符串啊。能不能得到?啊,咱们可以先尝试怎么做呢?先尝试着把这张表里每一行的K和V先给它拼起来。
20:05
能不能拼,像这字段跟这字能不能拼起来,怎么拼,是不是用慷开就行对吧?慷K可以把一行里边俩字段拼起来啊,OK,那咱们接下来就尝试去写一下啊,我这个have so to应该起来了,应该能连上了啊,那接下来咱们把这个啊去写一下啊去写一下,那这个它自己肯定是不能作为拗了,对吧,所以这个别名呢,咱们也不要的了,给它诶去掉啊好,那接下来呢,我们接着往下走啊,Select。S啊,Select什么呢?呃,这个from啊,应该是ods层的,Or DR older statelo啊,DR。Status block,那从这边里去拿数据,Where,那DT呢,我们拿增添的2020杠零六杠幺四,啊把这数据拿过来,那数据拿过来之后呢,我们所需要的字段应该有谁呀?首先第一个order ID咱们是不是得要啊,这个必须得有,那一会是不是得用order ID去跟那个O去对比呀,对吧?得用它join呢?啊所以这个必须得留着,那刚才咱们说了,我们需要将谁将俩字段给它拼接到一起,一个是那个older the是吧?啊,把它需要拿过来,那还得把谁拿过来啊?
21:16
应该是还有一个operate time吧,哎,这是它对应的时间,那我们要的是把它俩是不是得拼到一块啊,对不对,那这个怎么拼,是不是交给com k这个函数啊啊,那这个函数呢,我们需要把它俩先放进来,然后中间呢,需要由一个分隔符进行分割,那比如说咱们这用什么用什么分割呀。定什么风格呀?啊。用啥都行啊,你用冒号啊,啊或者用啥,或者用等位号是不是都行啊,那假如说咱们现在先用冒号分割啊,先冒号分割,OK,你看一下咱们这个结果,哎,出来是什么样的啊来我们运行一下。来这个数据看一下啊。OK,你看这个数据是不是出来了,哎,出来之后呢,那咱们这儿是不是就是UK。
22:05
有A有K有A对不对,能看懂吧,啊,那OK,你拿到它之后,那接下来需要干啥。那现在咱们是不是还是一一个订单分布在多行里边,我们最终需要把一个订单是不是放到。一行里边放一行怎么放?那肯定是用collect对吧?啊,那接下来呢,我们要想用你就得干啥。这得怎么做呀,这得分组吧,你不分组是不是不能克来的,那我们分组一下,哎格来BY一下咱们的older ID啊格order ID,那当然了,这块你就得把是不是这个拼接好的这个字符串给它放到一个class set里边,Co哎有set有例思,你说咱时用谁就行了。它俩有啥区别?赛去龙丽不去龙对吧?啊,那咱这有去龙的需求吗。就是没有,没有的话,你用例子用that都行啊来,那咱们把这个放进来,呃,那OK,咱们这时候呢,再去这个走一下啊class that例的返回结果都是什么什么类型。
23:08
都是都是数组类型,都是俄类型啊,你看一下现在这个效果什么样的,索尼。嗯,这个因为聚合它需要走这个计算引擎了啊,因为分组了嘛,那所以这个稍微慢一些,咱们等一会儿啊。来,我们稍微的等一下。嗯。呃,这个任务呢,没有提交上来啊,上来了等会吧,哎,好,已经开始了啊。很快了,很快。嗯。嗯,大家说这个一会这个结果应该什么样的呢?哎,往下其实就能看出来,你看这个结果是什么样的。哎,这有啥,这是不是有order ID,这是一个订单嘛,然后后边呢,这个数组当中应该是什么?它的多个状态吧?啊,多个状态以及对应的时间啊,这个看着是不是已经和咱们那个最终的那个字符串很接近了呀,对不对,我们要想得到是一个什么,是一个字符串,然后K与V之间以固定分隔符分隔,然后多个KV之间也以多个也以固定分隔符分隔,对不对,但咱们现在呢,是一个数组,而不是字符串,那接下来咱们现现在要做的事应该是啥呀?
24:24
是不是应该把这个数组我能够转成一个字符串就行,然后将数组当中的每个元素怎么样。以一个分隔符给它分开就行了,对不对,因为咱们现在一个元素已经是什么了,一个元素已经是一个K冒号V了,对不对。是不是一个元素已经是一个K冒号V这样的一个子字符串了呀,对不对,那我们要做的只是将这几个东西,哎,让它以固定的分格符分这个分格,然后呢,生成一个字串就行了,哎,那谁可以将我们一个数组当中的元素以固定的分隔符分开,然后呢,生成一个字符串呢?有没有这样的函数啊?
25:01
有没有啊?有没有这样函数?有没有?有啊,咱们有这样的函数啊,有这样函数,哪个函数可以实现这样的效果呀,Con开with啊,就是这个函数来。看一下con,哎,Cat contact ws这个函数,它就能够实现我们所需的效果,这函数它使用单针,有没有用这函数?用过吧,那这个函数它首先你需要给它传几个参呢。传俩参,一个参数是一个分隔符,那另一个参数就是一个啥,就是一个数组,那它返回的是一个字符串吧,然后呢,它会以你传的分隔符把你数组当中的每个元素分割开,哎,那它是不是正好就是咱们现在想要的一个效果,OK,那所以说咱们把这个数组呢,再交给这个慷开的位就行了,Con开的位,然后这个函数呢,我们需要传两三,第一个呢,是分隔符,分隔符咱们KV之间用啥呀。
26:01
那K和V咱们用的是冒号对不对,那这个KV之间的咱们用啥呀?用逗号吧,行吧,用逗号,然后呢,我们CTRL,哎,V。来把你再来个逗号啊,CTRLV,把这个数组再给它,好,你看这次我们再返回啊,来走。你看这次呢,这个效果肯定就不一样了,诶你看是不是方块二维了啊,然后这就是一个啥,这就是一个字符串了吧,对不对,哎,那是不是现在已经得到这个符串了,得到图串之后,那咱们就可以怎么做了,就可以把这个是不是交给s tr to map,让他给咱转成map了呀,哎,那这样一来这个效果其实就实现了啊,但咱们现在还不能直接转。啊,为什么不能转呢?你其实可以发现一个问题啊,这是不是一个K对不对,那这是一个V对吧,那一会儿我们要想转成map,是不是得告诉他我们KV之间的分隔符是是冒号啊,对吧,结果你会发现啊。这是不是也是冒号,它是不是会解析错误啊,对不对,所以说因为咱们时间当中有冒号,所以这个KV之间的分隔符不能用冒号啊,咱们得换一个,那换啥呀,随便换,你就说我换成我者等于号吧,啊换等于号是不是也行,来我们走一下。
27:12
很nice似的啊。把这个冒号咱们换成这个等号,哎,这回换等号了对吧,那这时候应该就没问题了啊,那接下来咱们将这个字符串再交给s tr to map。那个嵌套有多少啊,嵌套有点多,哎,切都麦吧,然后呢,CTRL,喂,把它先翻进来,翻了之后呢,我们后边还得再传两个分隔符对吧?那第一个分隔符应该是什么?第二个分隔符又应该是什么呀?咱们去看一下这个文档吧,看看他要呃,看看它那个给咱们说了没,来看一下找到那个可like不是这个s to map啊,来看一下两个参数啊,第一个这个这个三个参数,第一个参数字符串没问题,第二个是list diter,对吧?List diter,那咱们应该传的是谁呀?啊,List diter将test的分割成KV建筑论,也就说实话就是K多个KV之间的分隔覆盖啊,然后第二一个呢,是K和Y6之间的分隔符啊,那咱们这儿呢,应该传啥呀,第二一个。
28:13
应该是是一个逗号吧,然后第三个应该是啥,应该是一个哎,等于号才对,对吧,那也就是他应该就能够将我们这个值哎转成map了,这回再试一把啊执行。嗯。这行看这字行不行啊,OK,你看这个结果。好,这时候大家是不是就看到了呀,那咱这里边儿已经是一个这种map的结构了啊KVK。VK是不是这样呢?那我现在比如说我想拿拿到那个订单的cur time,那是不是就拿1001,哎,这个对应的value是不是就可以了啊,那payment就是1002对应的value是不是就可以了?哎,这个就比较简单了啊,比较简单了,然后大家可以看一下咱们这是不是一直有一条这个全是no的这个数据啊,这个咋回事,这个。
29:02
怎么回事?啊,很简单啊,还是之前那个问题,我们现在从哪张表里查ods层查对不对,Ods是不是有索引,然然后呢,咱们那个参数,嗯,是不是可以解决这个问题啊,但是那个参数咱们之前是只在当前会话有效吧,我今天新开的会话,所以说那个参数是不是就没用了呀,那这时候你再把那个执行一下,再查那个not值就没了啊,就没了,所以说这个大家呃知道怎么回事就行,好那现在我们相当于已经拿到了这一大堆的时间了啊,拿了一大堆时间了,好,那又完成了一步啊,那我们拿到这个时间之后呢,我们相当于啊,这个new当中就已经有了这一堆时间了,哎,时间都有了。啊,那这些字段呢,在oldero里边都有啊,那还有一个啊,你像proce ID pro ID pro older ID里面是不是也有啊,那还有谁没有,还有谁没有。哎,Activity的ID,我们的order info当中有吗?
30:00
这个有吗?这个也没有,你看啊。这是咱们那个new对吧?New里边有吗?是不是也没有activity ID啊?这activity ID指的是什么?是一个订单参与到某个活动的ID对吧?那这个这层关系在哪存的的呀?订单与活动的关联关系在哪存的呀?这样存着。是不是在一个activity加上这个order,这这张表是不是这张表里,这张表里记录了我们订单与活动之间的关联关系吧?啊,那所以说我们还得是不是从这张表当中去拿订单所对应的activity ID对吧?那所以说那接下来呢,咱们还得去这里面去拿一下啊来我们找到这个对应的表,拿取所需的字段,那SSE。而c like这个from哪张表应该是ods层的,哎,Activity,哎,Order这张表,那当然这张表呢,我们也是这个只获取什么呀,获取当前的分区就行啊VRDT等于哎2020杠零六杠幺四啊呃,这张表我们所需的字段呢,只有两个,一个是older ID,一个是谁activityd,哎,TVITYID。
31:16
啊,拿到了,OK,那其实我们在这儿下边呢,我们是不是写了三个字查询啊,一个是从older ino里边查到,一个是从older status log里边查的,还有一个呢,是OS activity order这两边得查的,对吧?其实咱们这三个子查询查出来的所有的结果拼在一块才能组成谁呀。才能组成咱们这个所谓的new吧,啊是这样的,那所以说我们现在需要先把这仨东西先给它召唤到一块啊,写三字查询来咱们CTRLX。来括号啊。CTRLV啊好,那这个咱们随便起一个别名啊,我看文档叫什么,咱们跟它保持一致啊,要不然的话,一会儿这个还得改啊,我们往下拉一下啊呃,往下拉它叫做这个第一个自然叫做。
32:06
呃,叫做log是吧,一个叫做这叫这这不是log,那它那个叫啥,我看一下。一个log,一个是呃,INF for,它叫INF for in for log act,对吧,那咱们跟他保持一致,那这个就叫做呃,In for呗,啊,Order ino嘛,这个是从log里查的,那咱们就叫log呗,啊,来来,括号啊,CV啊,我们叫做log。来。那下边那这个叫什么?这个叫act对吧?啊CTRLX,哎,拿括号啊CTRLV叫做act。OK,好,那现在问一下啊,我们这仨子查询是不是现在得撞到一起组成一个new对吧,那问一下啊,那咱们这仨表join的时候采用哪种join方式呢?你得考虑考虑啊,采用哪种招的方式,其实你就得考虑你最终想要的是什么样的结果,对吧?那问一下这三章啊,紫查询谁是咱们这个结果的主体啊,谁是主体,是不是肯定是older ino是主体对吧?这是主体啊,这是主体,那所以说那我要返回的所有数据是不是应该是order info所拥有的全部数据啊,对不对?那所以说这样一来的话,其实理论上直接怎么做就行,让下边两张表都跟他做一个left是不是就行了呀,对不对,那当然咱们还是具体情况具体分析啊,你像这张表。
33:23
啊,这张表当中啊,你查出来的这个订单,是不是查出来这个今天所有的这个变化订单的这个订单状态呀,对不对,那你说这个order ID跟这个order ID啊,跟这个ID它俩是相同的不。哎,应该是一样的啊,也就是说你这张表跟下边这个自查询它俩的ID是一样的,所以说这个用let draw,用order,用用那个inner是不是都是一样的呀?哎,都一样啊,这个文字无所谓,那所以在这呢,你比如说我就我就写照吧,啊写照那接下来看下一个,下一是不是有一个订单跟活动的关联关系啊,那你说这个。
34:00
跟上面两张表转的时候,咱们采用哪种照的方式?还用inner照的还行吗?那咱们还用in还行可以吗?这次。你考虑一下啊,首先我第上边两个子查询,我现在是不是已经撞到一起了,对吧,已经撞到一起了,然后呢,因为它俩里边的OID都是相同的,所以最终返回的结果是不是还是那些OID啊,还是这么多,然后呢,他俩现在相当于已经有一张区表了,然后再跟第三张子查群进行照的啊,那它们的对应关系应该什么样的?是不是肯定是前两个子查询的结果是包含第三个子查询的,为啥呢?因为我不是所有订单都会参与活动对吧?那所以肯定是这样一个对应状态,那我要返回的数据呢,是不是还是这么多呀,那你只能用啥?只能用left,这回在于inner,这那就不行了,你就丢了一大部分数据,对吧?啊所以这呢,咱们只能用leftro啊leftroro这OK啊好,那咱们把这个连接条件去逐一的写一下啊,那先写前两个,那先写两个,这个应该是in for job log,然后这呢写什么写啊啊这个照条件先别忘了,你要不写照条件就是就什么了,就是。
35:11
迪卡耳机,迪卡耳机啊。前面有这个,正好前两天有个同学,他这个是工作的时候啊,他就遇到这个问题了啊,他把那个很简单啊,就是几张表进行照,没有任何的业务逻辑,然后数据量很少啊,每张表也就几千条,几千条,数据也就几千条啊,完了之后呢,他应该是照了有四五张吧,然后结果呢,他连接条件他不是没写,他写他写错了。结果导致笛卡耳机了啊,完事那个就特别特别慢啊,半天那个任务也也进行进行不完,因为笛卡耳机需要是不转的太多了呀啊所以这个问题大家需要注意一下啊来,那log这个on on什么on in for啊,然后点是不是ID等于咱们这个log.order ID吧啊然后下边也是接着写啊来啊,啊on谁是不是也是on in fo点啊ID啊,让它等于咱们这个actct点呃,Order小选ID没没问题吧,那咱们把这仨表装到一起之后呢,我们需要从里边去选择我们所学的字段啊,Select啊,Select,然后呢,咱们from下面这俩子查询。
36:25
对没错吧,这三个词插句没错吧,然后咱们把把这里边所有字段呢,都要选出来啊,都要选出来啊,那这一大堆字段啊,咱们CTRLC选过来。CTRL,喂啊,那咱们呢,需要在这个前面的圈加上这个哎别名往下拉一下啊,这应该应该是什么名,应该是in份吧,是不是都是来自于in份这个表啊,那接下来呢,咱们把剩下的那俩字段也拿过来,一个是呃,Log当中的这个map对吧?这个map咱们起个别名啊,咱们叫什么呢?叫做呃S这个呃呃time step啊time step,那就叫TMPS吧啊TMPS啊,Time stamp啊那随便写一个就行啊来,那把这个CTRL啊C啊咱们诶选一下啊,放在这吧啊这个叫做log点啊TMPS这个没错对吧?那再往下还剩下最后一个act的activity ID是不是选过来啊,OK,那这样一来我们相当于这个哎old和new这个字段呢,应该就能对应上了,当然呢,这个因为什么?因为我们将这一大堆的时间是不是给它放到一个map里边来啊,所以说你从。
37:37
个数上来看确实还是不一样,但是其实内容已经是一样的了,对吧?好,那这个搞定,那搞定之后呢,我们把这个整个的大circle呢,给它放到一个自查群里,跟这X那来走。CTRLV,这就是我们写了半天啊,所获取到的这个new啊。来type一下,来写个别名叫做new啊,好,那old的有了,New也有了,那它俩是不是得进行全外联啊,终于可以全外联了啊,Ul for auto draw啊,转,然后呢,下边来一个on啊。
38:14
On啊,什么on old点,呃,应该是咱们得看这个选的是啥啊,Old里边叫什么叫做ID new里边叫什么?New里边也叫ID对吧?啊,New里边也叫ID,那所以说咱们就直接D照D就行了,D等于new.d好照上了,照上之后咱们终于可以进行这个新旧的一个对比了,对吧?Select啊,然后呢,往下走from啊,那接下来咱们就还得是,呃,按照之前的那个套路呗,啊,这是old,这个是new啊,那我们最终总结到一个规律啊,我们一个什么规律是不是就是。看new是否是不是now啊,对吧?如果new是now,那我就用old的值,New不是now,那我就用new的值对不对啊,就是这样一个逻辑,所以最终那还是逐个字段的去比呗,那就if啊,If new.id啊,Is now啊,那我就用old.id那否则的话呢,我就用I new.id啊,就是这样一个逻辑。
39:13
啊,当然我们下边每个字段都是这么写啊,这里边儿可能有一个地方需要大家注意啊,哪个地方啊,就是咱们这几个时间还是这几个时间的事儿啊,你说这几个时间啊,大家认清啊,这几个时间,你说咱们怎么搞这几个时间,那比如说我这个下面都都改完了啊,都改完了下边我时间我我开始比了,比第一个时间啊,第一个时间那是不是得if if是不是得new.cur time is now。啊,然后又用old,否则用就用这个就new对吧?哎,那怎么去获取这个new里边的cur time呢。哎,New里边这儿还有一个time,那呃,因为这个time是咱们oldero当中就有这张表,对吧,那咱们不说cur,咱们说谁呀,说payment time pay。T,有这个字段吗?没有啊,那这个时间在哪放着呢?在哪放着,是不是在咱们的这个MPS这个map里放着的呀,对吧,所以说我们应该从这个map当中去获取我们所需的时间,那这怎么做,是不是点。
40:15
PPS啊,那你怎么去获取你想要的那个状态的时间呢?也就是说你怎么去取map的value对吧?Map怎么用还记得吗?APP怎么用啊?啊,咱map用的时候呢,其实就这么用的啊,假如说这就是我map的字段名,那你想获取某一个K对应的Y6只需要怎么做方括号,然后呢,里边给它传啥传K就行了,是不是跟数组有点像啊,数组我传的是下标啊,那map你传的就是K值啊,那所以这呢,直接这么写就行啊里边呢,我们比如说呃,1001或者102101就是c time对吧?啊那你就判断呗,如果说is no。啊,那is now的话,那我就怎么我就用all的。
41:02
点啊这个什么东西啊,那个cur time啊,否则的话呢,我就用这个东西。哎,那这个CTRLC拿过来,哎,这是不是就搞定了,哎,是这样的,那所有的时间你都是这么去获取啊,当然你得明确啊,就是你不同的状态,它所对应的这个N不同的这个编码啊,对应的状态是什么状态,要你这个得看哪啊,是不是得看咱们这张表,哎,Base DC你得看着这张表去写吧,啊啊,咱们把这个搞清楚啊,好,那这就是咱们这条S口啊,剩下的字段呢,都是相同的逻辑啊,咱们给它补上就可以了。啊来从上,然后粘下来。在这儿啊,CTRLC。嗯,来把这个替换一下CTRLV来。他一下,呃,他那个别名跟我不一样是吧,他叫TMS,我有个屁是吧,把那个P去掉啊,OK,那这就。
42:01
呃,诶,这还没没变过来是吧,TMS,呃,我看哪还有TMS。呃,这儿啊,把这个去掉。嗯,这个是不是搞定了啊,这划多了啊,我这诶不是诶诶在这啊行,这回就搞定了啊好,那当然呢,这个选完之后呢,我们还是得考虑到怎么把这个数据放回去啊,要放回去是不是还得用到动态分区,那所以说咱们这呢,给它快速的写上,哎,Insert isert,哎,后边来allright,来一个table dwd fact order in for,咱们来一个part啊里边呢,来一个DT,等于诶等于是不是又不知道咋写了,不知道咋写就不写了啊那直接DT就行,那下边我们这个按什么分区啊,现在是按照cur分区,哪一天创建的订单我就进哪个分区,那所以应该是是不是应该是这个时间呀,对吧,所以咱们直接把它拿过来就行了,CTRLZ,你对它呢,做一个格式化,Date format啊,CTRLV,逗号呢,来一个YYYY,然后杠大M,大M,然后杠DD。
43:03
啊,那到这一步呢,我们相当于就完成了这个数据的这个更新的思考啊,其实跟上午那个逻辑很像很像,只不过就是咱们这个new呢,是不是没有那么容易获取啊,我们得从多张表当中来去拼一下这个结果啊好,这就是咱们这张表来视频录一下。
我来说两句