00:00
来,那下面话我们来具体的这个实操一下啊,实操一下就就就好了啊,别着急,那下面的话我们往里面去写入数据吧,比如说准备数据,我们已经准备好了啊呃,一共是这是就目标表,然后呢,需要三张表,一个是order in for,还有一个是OS activity order,还有order state对吧,这么三张表。那像里面插入数据呗,哎,那我前面这个可以留着啊,这个可以留,能留点就留点啊,那我们要向目标表里面插入数据,往这里面插好,那目标表呢,是一个分区表。呢,这个里面是要用这个动态分区啊,动态分区的方式去处理SE啊,Select from晕是正常的,这是相当于是顶级最难的了啊,这块你能扛得住,后面你就畅通无阻,那old,嗯,Old,然后之后呢,是负MU out。
01:06
在。Old啊,这个on吧,直接啊啊啊后面一拼写对吧,就说处理这个累积型四字表的处理这个套路,首先是old,然后后面是拼上这个new啊,就能把它对应的这个实现了,那实现的话先来一下这个old吧,Out的话就是S。行,From from哪张表呢?哎,From这张表历史的吗?把这面拿出来,然后外条件。外条件Y呢,这个DTDT呢,一定是in啊in,那in哪呢?In的话是今天新增加的对应的数据对吧?哎,那就是s select,嗯,S星。
02:08
From from的话,我们这里面就从这个从哪张表啊。嗯,新表我们查的是。订单变化啊对,查这表。查的是订单表,订单表里面,哎呀,这个不是型啊,这个是时间,它的创建时间哈,然后贝尔。DT。等于今天2020杠零三杠幺零,那这里面这个呢,时间正常,我们应该添加的是这个cur time对吧,但是呢,这块你需要对它进行格式化,Date form,把这个时间放进去,然后呢进行格化。杠MM年月日对吧,年月日这样呢,是一个结构。
03:04
不知道到这儿是否还清楚啊,比如说我们要查的是先找出历史数据,那找出历史数据哪一个分区的数据呢,那就是。他发现了。啊,发现了新产生的数据当中,它的cur time,比如说是3184319。哎,在我们今天发生了变化,只要发生变化的话,我就要覆盖你原来所有的这个对应的这个分区。那我就要把你查出来。哎,OK order的搞定,Order的搞定之后呢,下面我们来新的啊,来新的新的的话,这里面有点麻烦事,麻烦事呢,主要是处理它,比如说all DS all states这里面因为呢,它这里面呢是订单状态和修改时间。啊,修改时间,修改时间呢,它对应着不同的状态,它对应着像支付时间,取消时间,完成时间,退款时间,退款完成时间对应了这么多。它是以行的形式,每一行代表了一个状态。
04:01
对吧?每一行代表一个状态,但是我们希望的呢,是把这些行转换成。一列啊,就是每一列代表一行的信息。这样去做,那你需要把这个行转换成列。那怎么转呢?中间用到了contact拼接,中间用用到了这个contact,嗯,Set进行转换啊,还用到这个street to map啊一步步转的好,那这一块的话,我把这块代码先拿过来哈,给大家讲一下得了啊,这块就不敲了,嗯,到这。这块啊,把它拿过来,我要绑定上每一个订单所有的状态,那状态的话,你正常情况应该从里面一层层写,你看啊,先看一下这块contest,把这个order state状态和这个操作时间绑定在一起。这一步应该没问题吧,啊绑定在一起,绑定在一起之后呢,用这个class set把对应的行,这还是行的。
05:05
每一行内容用这个ID进行一个分组,分组之后把相同组内的数据拼接到一行里面去,这块是真正的行转列。你这里面不存在着多行吗?那我按照你相同ID的数据聚合到一起。把它变成一行。啊,变成一行,变成一行之后呢,哎,我要把里面你的数据都取出来,因为它变成一行之后是存到了一个对应的数组里面。我取出你数组里面每一个值,然后用谁进行拼接呢?用逗号把它们拼接在一起。拼在一起。拼接在一起是长这样的一个数据,那长这样的数据呢,它的特点呢,是大的方向上,外部呢是用这个逗号分割,里面呢,它由于是这个all states和ER time中间是用等号分割的,那我需要用它再来一个分隔符,把等号切割出来对应的K和V。
06:06
就这么一个操作是吧,啊,你稍微回顾一下啊,其实就是这样慢慢理解一下啊,自己运行两遍,我觉得这块应该就没问题,所以说这块呢,就是取出来取出来。所有的状态变化啊,把这个对应的多行变成对应的列。这个是真正解决时间问题的哈,解决时间问题的,那把它拿来,这没问题吧,按照这个ID进行分组。这块也就说那目前这里面对应的是这个发生变化的前在。啊。这里面取出来所有状态变化对应的时间,而且是一整行内容,把这一整行的内容放到了一个TMS这么一个别名里面去了。
07:05
哎,放到这里面,那放到这里面,这还不行啊,这是只是取出这里的值,我需要对它进行。跟别人进行招引呢。我需要有三张表的一个噪音。哪三张表呢?你还需要跟上这个order。这谁呀,这个。对吧,你得跟odo in for进行一个拼接,你这里面只对应的是时间的信息,我这里面可有除了这个这块时间的信息之外,还有其他一些字段呢,你需要给我补齐了。那把其他不补齐了,那这个表叫log上下面这张表。星from这张表,我把这张表的信息也得拿得到。
08:02
对吧,哎,拿到这张表叫什么名,起的名。关掉。看一下名字啊啊,我这里起的名字叫哈,那就把这个in拿过来。哦,上面忘加护理条件了。过滤条件,然后呢,这个表呢叫in for,这两张表就关联在一起了,那关联的ID是什么哈,来找一下它们之间用什么关联呢?这是订单,你这个是订单状态,嗯。这个是订单ID对吧,你说状态表里面有个订单ID,那本身我这是一个订单ID,那就是他的ID那就是。啊。啊。嗯,log.order ID等于in for in for表的ID,对吧?ID,这是ID,那们两个之间能够拼接起。
09:17
两张表关联上,关联上之后我就能取出这里面的值,同时也能取出这个值,尤其时间,他负责时间,他负责其他的字段的一个填补,那还差一个,还差一个活动ID。对吧,哎,活动ID,那差一个活动ID的话,那你就需要再进行一个噪音操作,拼接上你下面这张活动表,你说然后。From from这张活动和订单的一个关联表拼接在一起,当然也是今天的条件。DT等于0310这么一拼接,然后加上这个按条件这个表名我给的是什么表,我看这里面啊,因为后面我们要粘这个表名给的是act哈。
10:20
嗯,On的话找一下它们之间的一个关联关系,这张表是活动的编号啊,优惠券编号out ID,诶这里面有一个auto ID对吧?ID能关联上,我就能取出对应的活动ID,那这个是。它的ID那就是act.id等于我跟这个订单表进行关联音符点ID,这样不就拼接在一起了吗?啊拼在一起了,但是啊,你要注意看一下这个这个条件就是这个噪音它行不行。啊,他行不行,你上面呢,是所有订单的表是有订单,如果你去单独的去就只是招人,这个下面这个活动的话啊,这个参加商品。
11:09
呃,参加活动的商品的表。你看啊,你这里面是所有的订单,我这个呢,是参加活动的订单。啊,就是说参呃,参加活动的商品的订单,它是这一部分。那你这是全部的,如果你只是用一个用个谁呢?啊用个噪音操作的话。那时候,我剩下的是所有的。那只剩下这个参与参与活动的这个商品了,那你会干掉一些,还有一部分没有参加活动,哎,对这个建方已经说了,你需要来一个左外连接。有谁多的事儿,谁多呀,这里面多呀,这里面包括参加活动商品和未参加活动商品,你下面这里面只是参加活动商品,所以说来一个主外对吧?哎,子阳也说了啊,主外非常对象啊,非常正确,主外就搞定了,嗯,行,那现在呢,他们之间就都已经关联在一起了。
12:09
那关联在一起,你这是三张表,关联往这一放,这不行啊,那怎么办?From下面这个是查询,然后你上面再来。呀,看一下啊,看一下这块能不能理解啊,你你你光下面这个表,它连它连它连上了,那你得给谁呀,对吧?啊给谁的一个问题,那给谁的一个问题,那往下写吧。我直接粘过来吧,这个这个太太那个了哈,太多了。直接把这个了。哎,这就是我为什么要按照这个课件上这个名字啊,省着这个这块还得改,那首先你看in for这张表里面是这个传统的这个OD so in这里面提供的这个字段呢,是比较多的,对吧?啊提供了这么多字段,那只有两个字段,这里面两个字段是另外两张表提供的,一个呢是活动ID,活动ID呢是A这张表。
13:07
没问题吧,他能够用,因为这里面有一个。是能够提供的。那还有呢,还有一个他只放了一个,明明这块应该有多个这个表的,这个时间我只放了一个,因为它是一个map。对吧,这不这个这个知道。TS它是一个map的话,那后续的话,我可以从那个map里面取出我想要的很多值。都是可以的。那这样的话就是新增的数据我们就都已经获取得到。那上面这块呢,这块呢,是老的数据,这两个已经进行了一个满外连接啊叫全全连接。那上面这些字段,那这个字段呢,就是你未来你要往这里面插就往里插,那插入的话也是进行一个判断,还是有的留的,没的留旧的。对吧,哎,没心思去了,就拿过来吧。这块的一个操作往上。
14:03
从这开始啊,上面这些所有的操作都是这样的,有新的留新的,没新的留旧的。在那留一个啊。哎,拿过来上面有新的留新的,没新的留旧的,只不过是这一块,这一块的时候用到了,因为这个TMS它是一个map,你需要一个一个的去传对应的值,比如说1001对应的是谁呀?我看啊1001,我把这个状态表拿回来。看一下。对吧,这么几个,这里面对应的是1001未支付啊,看看对一下能对能不能对上啊,创建时间有了支付时间。
15:01
啊,这个相当于创建时间,现在未支付时间嘛,1001,然后呢,1002呢是已经支付时间,这呢1003表示的是已取消,1004对表的是已完成退款中对应的1005,呃,退款完成对应的106,为什么不在这里就把KV取出来呢?啊,可以取出来啊,可以,你可以在下面这块取出来啊,有同学说这个在这块是不是没取啊,啊没取出来,你可以在这取出来,没有问题啊没有问题啊,啊是是一样的啊,你在这下面取出来,那你那那样可能会理解起来更好一点是吧?啊那也可以,你可以那样去取啊,没问题,那当然了,你可以在上面这块啊进行的一个拼接也是没有问题的啊没问题哈。都可以啊,挺好啊,这个脑洞一下挺好,说明能够跟得上啊,说明能跟上,说这块呢,你可以这个这个飞哥刚才说的是吧,你说这块我不在这儿,这个比较怎么办呢?我把它拿到这。他他直接就给它展开了,在这直接展开是吧,从这里面直接把它展开是没有任何问题的啊没有任何问题,然后那上面的话呢,这块就不用额外的这块处理了,那这块还是说呃new啊是is now,然后old,然后新的是吧?啊行,那后边还差一个,还差一个这个时间,那这个时间呢,就是这个分区。
16:18
我们取的是得是创建时间。记住了哈,所有的分区,就说这个累计性市表,它的分区呢,都是按照这个事件开始的时间。进行创建分区,事件开始实件,你突然来了一个,比如说这个退款,你上这建分区的时候,那它记录不了完整的一个过程,哎,只有是事件开始开始去创建,那这块呢,仍然是这个date what啊我就不写了,仍然是date ma。对吧,里面的话还是这样的,1001嘛,1001表示的是未支付啊,未支付的时间,然后O啊创建时间,嗯,这块呢是呃new啊这就是一个格式化,跟上面那个没有任何区别。
17:01
拿过来代码量还是挺大的哈,一上来就能理解的同学呢,我相信不会太多,需要点时间,但是慢慢的都能理解,这个我还是有信心的啊。因为咱这个一块一块的还是比较清晰的啊,相对来说比较清晰啊行,那这个呢,就已经写完了啊,后面这个还差一个,差一个这个on条件,On条件的话,我们按照这个ID吧。一个是O的ID。o.ID等于6.id,哎,这样的话就把它关联在一起了,整个的一行代码,那来试一下吧。建表语句。哎呀。各种卡呀。
18:00
行,终于选上了,好,那选上之后呢,我们来执行一下。建表建表之后呢,用我们这个往里面去插入一下数据,看看O不OK。Time。那我试一下啊,看能不能指引出来。执行完之后呢,查一下结果。3月10号的数据。哎,现在你就能看到啊,现在我们就能够查出来对应的数据啊,对应的数据就是这样去做的哈。
19:08
所以这个应该是整个DWD层相当于是最难的一个,呃,一个circle了啊,这个circle你要能搞得懂的话,那后面其他一些逻辑我相信啊,处理起来呢,会更容易一些啊,容易很多哈。而且呢,好多。
我来说两句