00:00
好,那接下来我们看订单明细实时表的数据装载啊,我们先来看一下它装载的时候的数据走向啊,来点开这个PPT。好,大家看一下啊,上边指代的就是OD层与订单明细相关的业务表,下边指代的就是订单明细实时表,那OK,那假定今天是2020年6月14号,来看我们第一天在ods层能拿到什么数据。啊,那这个不用多说,是不是肯定是全量的订单明细相关的数据啊,没错吧?啊OK,那接下来咱们要思考一个问题,就是数据需要写到咱这个订单明细实时表的哪个分区当中。与评价师表相同对吧,那我们在这儿第一天的时候呢,也是要把数据写到多个分区当中的啊,因为订单明细时表呢,也是一个事务性时表,对吧?那它的分区规划呢,也是每天的分区存储当天新增的数据。没错吧,那也就是说订单明细是哪天产生的,就需要写到哪天的分区里啊,那所以说在这儿呢,我们需要用动态分区啊,将数据写到对应的分区里边啊,当然动态分区的分区字段的值应该由什么决定啊,是不是由那个订单明细的cur决定。
01:12
没错吧,啊,OK,这是首日装载的,诶,这个数据走向啊,那接下来我们再看,哎,后续每天装载是如何进行的,来我们看第二天啊,第二天我们在ODI层就只能拿到当天新增的订单明细记录了,没错吧,因为他每天的数据的同步策略呢,是增量同步,那所以咱要做的工作其实就比较简单了啊,咱直接怎么做,直接把ODI层当天分区的数据拿过来进行相应的处理啊,然后呢,写到DWD层订单明细时时表当天的分区里就OK了啊后续每天都是这样的重复的操作,那这就是订单明细实时表装载时的数据走向。接下来我们就开始编写啊,这张表的首日装载和每日装载的S语句啊,那现在咱打开date瑞吧啊,我们先看首日啊,那假定今天就是2020年6月14号啊,那咱先来明确一下我们应该从哪儿取数。
02:05
啊,那是不是肯定主要的数据来源就应该是ods层的o detail啊,对吧?那所以说咱直接select from ods层的detail表当分区呢,需要拿到诶14号的分区2020杠零六杠幺四啊好,那接下来我们从这里边选择一下咱所需的字段啊,咱们先尝试着从这里边获取一下咱们所需的所有字段,那是不是就是这些。啊,没错吧,那CTRLZ咱拿过来,拿来之后呢,我们去给它进行一下处理。OK,在这呢,我已经提前处理好了啊,咱们把这个所有的字段拿过来,拿来之后呢,放在这CTRLV。好,大家注意观察一下啊,那这里边有些字段它爆红了对吧,爆红就说明从ODD表当中咱拿不到这个字段对吧?啊,那拿不到应该怎么办呢。那从这张表里拿不到,那是不是咱就得尝试着从其他的表里边去获取啊,没错吧,那应该从哪张表里去获取呢?那这个呢,就得根据我们前面所讲到的业务表的表关系去找了,没错吧?那现在我们打开之前,呃,咱们采集项目当中那个表关系图啊好,那我们再拿一下我们尝试获取的这些字段啊,那我给他盯在这儿,在这儿呢,我们就可以对照着去看一下到底从哪张表当中获取咱们所需的字段了啊好,现在点开这个业务表。
03:26
来找到与订单相关的这些表啊,啊,这就是与下单相关的表啊,那现在我们逐个的去看一下啊,每个字段到底应该从哪个表里去获取啊,我们现在先看user ID啊,那从这咱能看出来啊,订单明细这张表呢,确实没有直接关联用户表,那所以它里边呢,确实是没有user ID的,对吧?啊OK,那没有user ID我应该怎么获取呢?啊,其实很简单,当然在那能看到啊,对吧?虽然订单明细实时表没有直接去关联用户表,但是呢,它是通过订单表,也就order info表是能够关联上user info的呀,没错吧,那所以说order info表当中是不是肯定有user ID,那所以说我们就能够从订单明细呃,能够从订单表当中去获取咱们所学的user ID了啊OK,那接下来继续啊,看第二个字段,第二个字段呢,是province ID啊,它与user ID是相同的道理,对吧?那咱是不是也是可以从订单表order里边去寻找咱们所需的province ID呀?
04:27
啊,没错吧,那OK,那接下来继续往下看啊,那再往下呢,还有一个activity ID以及activity ID活动ID和活动规则ID啊,大家来看一下啊,那虽然这张表当中是没有的,但是哪有啊。啊,但是咱下边这个表当中是不是会,哎,包含啊我们这个订单明细所参与的活动ID和活动,哎,这个规则ID啊,啊,没错吧,那所以应该从这张表当中去获取这两个字段啊,那同样的道理,是不是应该从啊,Older detail coon当中去寻找咱们所需的on ID啊?
05:02
啊,OK,那就是这么一回事,那接下来我们继续啊,大家注意观察,这儿还有一个originalal amount原价金额咱是不是也拿不到啊,对吧?但是这个拿不到呢,跟其他字段的原因就不一样了啊,那一会儿这个呢,我再另做解释啊好,那现在我们呃,就已经明确了啊,我们应该从哪张表当中去获取咱们所需的这些字段了啊OK,那现在呃,我们再回到data当中啊,那现在我们就可以逐个的去获取咱们所需的这些字段了啊,咱们现在先把这个region amount解决一下啊,为什么咱这拿不到原价金额呢?那现在我们回到ods order detail表当中去看一下啊,点过去。点下去大家注意观察一下啊。实际上这张表当中有一个字段啊,叫什么叫做SQ对吧?啊,是不是就是商品的件数啊,那还有一个什么,是不是还有一个older price商品的价格呀,对吧?啊,那咱们这儿最终要统计的那个所谓的原价金额指的是什么吧?指的是是不是就这一个订单里边的一个商品项的原价呀,对吧?那它的原价应该等于啥呀?原价是不是就应该等于商品价格乘以,诶什么呀,乘以商品的数量吧,没错吧,那所以在这儿呢,我们直接给它做一个乘法运算就可以了啊在这儿呢,应该用是不是order price来去乘一个,呃,SKU number啊,对吧,Number啊,好,OK,那这样一来我们这个原价金额就拿到了。
06:23
啊,好,那现在就只剩下这几个ID了,对吧?那现在我们从对应的表当中去获取一下来对应的ID,那我们先看user ID和province ID啊,那这两个字段呢,按照我们刚才的分析,是不是都应该来自于ods层的order INF表啊,对吧?那现在咱去获取一下啊好,那现在我们呃,来一个子紫纱询select from ods older in对吧?而分区呢,也应该是14号的分区,2020啊杠呃,零。六杠幺四对吧?那OK,那现在咱继续从这里边选择咱所需的字段啊,那首先第一个是啥呀,ID必须得有啊,那ID干什么用啊,是不是一会得用ID去和O呃o detail表进行关联呀,对吧?那这个必须得注意一下,好那接下来咱继续那下一个是啥?下一个是不是应该就是user ID啊,那再往下呢,就是这个province ID了啊好,那咱现在已经获取到这两个字段了啊,那当然上面呢,咱就没必要再去获取了,咱直接给它去掉,是不是就可以来给它删除啊,一个是user ID,那一会做关联之后再做最终的选择,那这个provice ID呢,咱也给它去掉啊好,那现在只剩下呃活动ID和这个优惠券ID了,对吧?那现在咱们先获取活动的ID啊好,那现在我们呃,继续往下进行select from应该是哪张表,这边是OD层的o detail activity这张表了,对吧?那当然分区也是十四二的分区,2020啊,然后杠啊零六杠幺四啊,没错吧?那从这里边呢,我们需要选择它所需的字段,那第一个是不就是older。
07:52
Detail ID啊,对吧?Deal_ID啊,那为什么要选它呢?因为我们一会需要用这个字段去和订单明细表做关联啊,对吧?那OK,继续,呃,那再往下呢,我们需要获取一个activity ID,那还有一个activity ID啊,OK,那这两个字我们也拿到了,那当然上边呢,咱就可以给它删除掉了啊好,那现在我们只剩一个了啊本ID,那接下来咱们去获取一下,来往下走来select。
08:20
诶,From应该是ODI层的older detail是不是库盘点啊,对吧?那现在分区也是诶2020杠零六杠幺四没错吧?那现在我们从里边选择所需的字段,首先第一个啊,应该是啥呀,也应该是older detail ID对吧?啊做关联用的,那第二一个呢,就是诶库本ID啊好,那现在我们所需的所有字段就全部都拿到了,那接下来咱要做的事呢,是不是就是把这几个紫查询给它关联一下啊对吧?把这个咱也删除啊关联一下,关联一下之后呢,我们就可以从中选择咱们所需的所有字段了啊那接下来我们说一下它的关联的方式应该是什么啊,那咱们关联的时候呢,有inner draw,有left join,有全外联,对吧?那咱们应该选谁呢?
09:03
在这儿呢,我们应该选择left draw啊,那把谁放在最左边呢?那是不是肯定是把订单明细放在最左边呀?没错吧,啊,这个大家要注意一下,那接下来我们就把这几个紫砂群呢,给它关联起来啊,那首先先给它们每人起一个别名啊。带走。呃,这个是older detail对吧,那我给它起名为OD啊,那往下走,这个是older info,那我名为OI。那这个呢,就是OA啊,然后再往下这个是older detail activity对吧,那我给它起名为OA。这应该是OA啊。好,那最后一个,那我们就叫OC吧。好,那现在每个子查询啊,咱们都给它起了一个边名了啊,那接下来我们要做的事呢,就是从这里边去选择,然后让他们做全外做left join对吧?那OK,接下来咱们开始啊,那这个应该是left join对吧?那连接条件应该是啥呀?应该是on od.o点什么呀?od.oid等于oi.id没错吧,没错吧,那接下来我们再left join。
10:19
啊,那继续往下走啊,那这应该是应该是od.id等于呃,oa.o detail t ID对吧?De,哎,T,然后下面ID啊,没问题吧,那接下来我们再来left draw那最后一个。啊,应该是on,呃,仍然是什么呀?哎,这这咱没有写on啊,把这个on补上啊,呃,仍然是什么呀?应仍然是呃,od.id应该。啊,OC点啊O啊DTDD,然后像ID啊嗯。好了,那现在我们就已经把这几张表装到一起了,那接下来我们要做的事呢,就是从里边选择咱们所需的所有字段了,Like from,好,那现在我们再拿一下之前的所有字段啊,CRC,拿过来,来,咱放在这儿。
11:08
啊,那现在我们就能够拿到咱所需的所有字段了,当然这个位置呢,因为咱没有起别名啊,咱起个别名就行了啊,CTRL为OK,那现在就要完事了啊,那获取到这个所有字段之后呢,你会发现这儿呢,咱是不是有这一个黄色的背景啊,对吧?这个黄色的背景呢,就说明咱这有问题对吧,你指向它,它就会说什么呀,Ambiguous column reference什么意思,是不是有歧义呀,对吧?那因为咱们下边很多紫茶群里边都有ID,他不知道选谁了,那咱这应该选谁呀,显然应该选是不OD呀,对吧?OK,那现在我们就哎完成了咱们所有字段的获取了。啊,那最终我们要做的事呢,就是给它insert到咱们这个DW的订单明细表当中,对吧?Insert table应该是DW do detail,注意后边的分区怎么写啊,Part是不是应该是DT?没错吧?那因为我们是第一天,所以我们这要用动态分区,没错吧?动态分区的话呢,我们这只写分区的字段就OK了啊,那再继续往下进行啊,那下边我们既然要段分区,那下边是不是就得多选一个字段呀,对吧?那多选的字应该是谁?是不是应该是这个cur time啊,对吧?那当然呢,需要对其进行一个格式化的处理,那咱们来一个data format,呃,CRV把它分进来,然后格式化成年月日的格式的啊。
12:23
OK,那到现在为止,那我们这个数据装载的首日装载的就搞定了啊。好,那接下来我们再看每日装载啊,那每日装载circle呢,和少装载circle其实差不太多啊,那区别就是少装载需要用到动态分区啊,那每日装载呢,不需要用到动态分区啊,没错吧,那接下来呢,我们其实可以以这个少日装载circle为基础,咱们给它改造一下。哎,CTRLZ,那就得粘下来,CTR位放在这儿,好,那现在我们去改造一下啊,那假定现在日期是2020年6月15号了,对吧?那咱们从子查询开始啊,那首先在这儿呢,我就需要获取到15号的订单明细了,没错吧?那接下来呢,诶,我是不是也应该从ods层的o in售表当中获取15号分区的数据啊啊那同理下边也是15啊,那这个呢,咱也是15啊OK,那获取到之后呢,那剩下的呃,操作其实一样的,是不是也是做left draw进行关联,没错吧?那关联上之后接下来怎么办呢?咱是不是直接把结果写到15号的分区就可以了,对吧?所以这呢,直接DT等于应该是2020杠零六杠幺五,咱这呢就不用动态分区了,不用动态分区,那是不是最后一个字段咱也不需要了呀,对吧,给它删除就可以了啊OK,那这实际上就是我们每日装载的circle。
13:43
那每日装载circle呢?其实看起来不难,对吧?但这里边其实有一个小细节,我们需要去注意一下,哪块呢?咱们往下看啊。其实主要是这个位置。嗯。就是这两个表进行关联的时候,咱们有一个小问题需要思考一下,思考一下什么呢?咱们来看一下啊,首先我们先明确一点,咱们用这个订单明细表和order info表去进行关联,主要的目的是什么?
14:09
主要的目的是不是为了拿到这些订单明细啊,他们的下单用户以及下单地址啊,对吧,就是为了拿优的ID和province ID没错吧,那所以说我们去进行left John的时候呢,我们期望什么呀?我们望能够在下边的这个子查询当中拿到我们上边的订单明细对应的所有的订单。没错吧,啊,那我们进行首日装载的时候,这个肯定是可以的,为啥?因为首日装载的时候,那每张表是不是都是全量啊,对吧,这是全量的订单明细,这是全量的订单啊,那所以说我们在下边儿这个子查询当中,肯定是能够拿到上边的订单明细对应的所有的订单的。没错吧,但是我们进行每日装载的时候,那可就不一定了。啊,当然咱这是可以的啊呃,但是有些情况下可能就不行了,那接下来我们分析一下啊来。
15:04
来看来看一下啊,大家都知道啊,那这张表我们采用的同步策略是什么?是增量同步对吧?那也就是说它的15号分区当中存储的是什么?存储的是啊,15号新增的订单明细没错吧?但是大家要注意了,Older info这张表咱的同步策略是啥呀?它不是增量同步啊,它是什么呀,它是每日新增及变化同步。啊,这个能理解对吧,那每日新增级变化,那所以说我们从他15号的分区里拿到的是什么呀,是当天新增的订单以及变化的订单。啊,没错吧?啊,那接下来我们就来分析一下啊,Older in15号的分区当中是否包含了older detail15号分区当中的订单明细所对应的所有订单?啊,来分析一下啊,OK,那这里边儿是什么?是15号新增的订单的订单明细没错吧,那这里边儿呢,包含了15号新增和变化的订单。
16:04
没错吧,那所以说实际上下边这个诶,分区当中是包含我们上边的订单明细所对应的所有订单的,所以在这儿呢,实际上直接关联是没有问题的,但是有些情况下呢,可能就会出现关联不全的这个情况啊,那所以说以后大家在做类似的关联操作的时候呢,需要多思考一下,嗯,当然咱这儿直接关联是没有问题的啊。
我来说两句