00:00
好,上一节我们已经完成了DWD层所有的业务表了啊,那本节我们来看一下这一层的数据装载脚本啊,那同样脚本一共有两个,分为首日和每日啊,首日的只需要在第一天执行,主要是为了做数据的初始化啊,那每日装载脚本呢,是需要每日重复调度的啊。好,我们现在先看第一个首日装载脚本,来我们把它内容拿出来看一下。好,放到这个sublime当中。好,我们一起看啊,那从第一行开始啊,那其实这个脚本相对来说比较常规啊,没有什么需要特别注意的地方啊好,我们一起看一下吧啊首先这有一个APP等于j ma的变量对吧?啊下边呢,有一个do对的变量,这个do date的变量呢,是我们必须得传的啊,这个主要就是咱们的初始化日期对吧?啊好,接着往下走,下边呢,就是每一张表的首日装载语句了啊,那装载语句我们就不再说了啊,我们重点看一下哎,传进来的这两个参数啊,第一个参数是不是动态分区的非严格模式啊对吧?第二参数呢,是为了解决拉泽罗索引文件失效的问题啊,因为咱现在仍然是在从OD层读数据对吧?啊好,那剩下的每个表那都需要配置这样的两个参数啊OK,那完事之后呢,我们看下边。
01:17
那下边呢,就是根据我们传的参数啊,去决定同步哪张表的数据了,OK,那下边往下走,那如果我们传的是奥呢,那就是把所有的表都给它装载一下,OK,那这就是我们首日装载脚本啊,相对来说比较简单啊好,那接下来我们再看它的每日装载脚本来往下拉。OK,我们再新建一个文件。来大家一起看一下啊,这个每日装载脚本呢,它相对首日装载脚本好像多了一点东西,对吧?那多的东西是啥?咱们来一起看一下啊,那我们还是从头开始看吧,那来看这儿啊,这有一个APP,等于jma,这个不多说,那下一个呢?哎,下一个是不是维护了一个do date变量啊,对吧,仍然是之前的逻辑啊,如果给你们传,我们给它传了,那他就用我们传的值,如果我们没传就自动计算前一天的值,OK,那接下来我们往下看啊。
02:14
这个位置呢,多了一个函数对吧?这函数叫什么?叫做date对吧?好像叫做清理数据,诶,那它清理的是什么数据呢?啊,这个函数它的作用是什么呢?啊OK,那接下来我给大家解释一下啊,首先大家先跟我一起去思考一个问题啊,思考一个什么问题呢?思考一个呃,就是这种累积型快照时表再进行每日装载的时候可能会遇到的一个问题。走,咱们一起去看一下,好,我们现在以谁为例啊,以优惠券领用试表为例啊,咱们打开它每日装载的这个逻辑啊,好,我们一起回顾一下啊,那每日装载的时候呢,我们需要先拿到这个累积型快照值表9999分区的数据,对吧?然后呢,再拿到ods层对应的业务表的新增及变化的数据,没错吧,那这两部分数据呢,需要做一个负al全外联对吧?那完了之后呢,我们需要从全外联的结果当中去获取这些记录的最新状态。
03:12
没错吧,那按照我们之前的设想呢,我们说这个最新的状态里边呢,可能会有未完成的记录,也可能会有完成的记录,对吧。没错吧,那完了之后呢,我们需要怎么做呢?需要使用动态分区,将这两部分数据分别写到9999分区和完成的分区当中,是这个道理对吧?那我们这样去看的话是没有问题的,但是呢,大家给我看一个极端情况啊,什么极端情况啊,就是假定有一天啊,我们拿到的这些所有记录的最新状态啊,都是完成的状态。啊,有没有可能出现这种情况啊,那肯定是有可能的,对吧?啊好,那出现这种情况之后会出现什么问题呢?我们继续往下看啊,那拿到最新状态之后,我们需要用什么用动态分区把数据写回到咱们这张实表里,对吧?啊那往回写的时候会出现一个什么问题啊,是不是就没有数据会写往9999分区啊。
04:06
没错吧,那这样一来的话,就会出现一个什么问题呢?就会出现9999分析的数据没有被覆盖掉,对吧?没有被覆盖掉就会出现什么问题,是不是就会出现数据的重复问题啊。啊,是这样的啊,那实际上我们脚本当中的这个clear date的函数呢,就是为了解决这个数据重复问题的啊,OK,那它是怎么解决的呢?我先给大家把大体的思路说一下,然后再去看具体的代码啊好,那现在我们先看一下思路啊,其实思路很简单啊,那这个函数呢,它就是根据累积型快照实时表9999分区的末次修改时间去判断它是否在今天被覆盖了啊,如果没有被覆盖,那就需要去手动的清理一下数据啊,这有它的逻辑啊好,那现在我们来看一下具体的代码啊,那首先我们看第一行。在这儿呢,有一个变量叫做current date对吧?啊,那这个current date获取的是什么呢?获取的就是当前的日期,当然呢,经过了这个处理对吧,是年杠月杠日的格式啊好,那接下来我往下看啊,咱们先先看这这一个什么呢?这有一个last modified date末次修改日期对吧?诶,那咱们怎样能够获取到那个9999分区的末次修改日期呢?
05:19
啊,其实很简单啊,你看啊,后边它是不是执行了一个命令,来大家一起看一下啊,在这呢,海FS-LS,那实际上这展示的就是我们那个呃,累积型快照实时表9999分区啊这怎么拿的看一下。那首先这个路径大家应该比较熟悉对吧?Verhouse j ma dwd啊这是DWD层对吧?那这儿呢,还有一个DOLLAR1 dollar1其实就是啥,就是我们这个函数的第一个参数对吧?那将来呢,我们需要给这个函数传入啊累积型快照十秒的表明啊,然后后边呢,Grab一下,9999杠九九杠九九,这样一来是不是就能够拿到9999分区的路径啊对吧?完了之后呢,使用aw k把第六列输出出来,OK,那它的第六列是什么呢?诶我们可以去看一下啊,在这儿呢,我们打开它,那完了之后呢,执行一个海豆版FS-LS看一下根目录就可以啊。
06:10
来,我们一起来数一下啊,那这个是不是第一列,这是不是第二列对吧?第三列第四列,第五列,第六列,第六列是不是就是一个日期啊,对吧?而这个日期呢,恰好就是它的末次修改日期啊OK,那也就是我们通过这种方式呢,就能够拿到累积型快照时表9999分区的末次修改日期了啊,那实际上我们现在拿到这俩日期之后呢,我们基本上就已经明确了下一步应该怎么做了啊,下一步我们要做的应该是啥呀?是不是就是判断一下末次修改日期和当前日期是否相同啊,如果相同,那就说明9999分区在今天被覆盖了。啊,否则的话呢,否则的话就说明今天没有被覆盖对吗?没有被覆盖我们就需要是不是手动的去清理一下这个数据啊,是这样的啊,那关键是这两个日期我们如何做比较,Shell当中呢,实际上是没有日期或者是字符串的比较运算呢?啊所以在这儿呢,我们需要怎么做呀,我们需要将这两个日期转成时间串啊,然后呢,在对两个时间进行这个比较啊是这样的啊那所以在这儿呢,我们使用加I2S这样一个方式呢,分别获取了当前日期和末次修改日期的时间。
07:21
啊,其实很简单啊,OK,那拿到这两个时间戳之后呢,我们就继续往下进行,大家来看这儿啊,看一下这个逻辑啊,在这儿呢,是不是比较了一下啊,判断末次修改日期的时间串是否是小于啊,咱们这个呃,当前日期的时间串的啊,如果小于那就说明什么。如果小鱼,那就说明他今天没有被覆盖对吧?那这时候呢,我们需要怎么做呢?需要去执行一个豆FS-RM-R-F,然后把这个9999分区下边的数据给它清理掉,那这样一来呢,我们就能够解决这个数据重复的问题了。OK啊,那这就是clear date这个函数的主要作用啊好,那接下来我们继续往下走啊,那再往下呢,就是每一张表的每日装载的circle了啊,那同样我们也需要注意这两个参数,一个呢是为了解决拉泽罗索引文件啊失效的问题,一个呢是动态分区的问题啊好,那接下来我们往下看。
08:16
到最后啊。到最后呢,仍然是根据我们所传的参数啊,去决定装载哪张表的数据,那大家需要注意的是什么啊,就是所有的累积型快照时表呢,在装载数据之后啊,需要多做一步,那大家来看一下啊,这个是不是一个累积型快照时表啊,对吧?那我们在执行了它的装载语句之后,还要再执行一个clear date诶这样的函数,那这样一来它是不是会判断一下是否需要清理9999分区的数据啊,如果需要它就会自动清理,OK啊,那接下来我们再往下走,那如果我们传的是奥诶,那我们就需要把所有的表都装载进去,装载进去之后呢,那所有的累积型快照时表都需要去执行一下这个date的函数。OK,那这就是他的每日状态脚本啊,好,那现在我们把这两个脚本都给它创建出来啊,那我们来到孩子5102,来到他的加目录的BI目录里边,我们先创建第一个脚本啊,那第一个脚本呢,它的名字应该是什么呀?应该是ods to d WD啊,完了之后呢,应该是DB下划线,是不是1.sh上对吧?啊,OK,那我们按一下I,然后把首日装载脚本的内容给它粘贴进来,CTRLC。
09:24
来,拿过来。好,第一个脚本我们就创建完毕了,接下来我们创建第二一个啊,第二一个呢,需要把隐匿的去掉啊,来,我们把呃,每日装载脚本的内容也给他拿过来啊,Ctrl a ctrl c。哎,粘贴。好了,那两个脚本我们就都创建出来了,接下来我们为其加上执行权限,趁着mod加X,应该是ods到DWDDB对吧?来一个星进行通配好了,那两个脚本执行权限我们就都加上了啊那现在因为我们现在是第一天对吧?哎,我们使用首日装载脚本啊,所有的事时表的数据都给它装载进来啊,那当然呢,在执行这个脚本之前,大家需要把所有的实表都串建出来,那我这儿呢,已经提前创建好了啊,在这儿呢,我就可以直接执行了啊来点杠应该是ods到DWDDBNE.sh对吧?啊,后边需要传一个O,然后呢再传一个日期2020杠零六杠幺四啊,那现在直接回车就可以了啊,这个脚本呢,需要执行一点时间啊,那我把这个视频暂停一下,好,这个脚本已经执行完毕了啊,那现在我们去检查一下DWD层的业务表有没有数据啊,好,我们找几个看一下。
10:32
来首先第一个dwd comment info对吧,咱点开看一下。啊,里边已经有数据了,对吧,那接下来dwt coupon,柚子,那这也有表也有数据了,那接下来往下走,Favor info。啊,没有问题,Order detail没问题,Order info也没有问题啊,OK,那其余表呢,我们就不再一个一个去查看了,因为太多了啊好,那现在我们首日装载脚本就算是执行成功了啊,那DWD层呢,我们到现在为止也就算结束了。
我来说两句