00:00
好,我们上一节已经把ods层的27张业务表全部都创建出来了啊,那接下来我们来看一下这个业务表的数据装载啊,我们首先先看一下它的装载思路啊,也就是这个PPT啊,咱们点开看一下。好,大家现在看到的两部分内容呢,分别代表我们的业务数据和ods层的业务表,那现在我们的业务数据呢,呃,就位于HD上的这个路径下,Origin date j DB下边啊好,那假定咱们现在的日期呢,就是2020年的6月14号,也就是第一天啊,那现在看一下我们拿到的这个数据是什么样的。在第一天呢,我们会使用此库啊,去做一个全量的同步,把MY当中的全部的业务数据都一次性的同步到我们H个,为什第一天的呢,要做一个全量同呢?是因为业务数据一般情下是在对吧?那所以说第一天的时候,不管哪张表我们做的都是全量同步啊好,那我们拿到的第一天的数据的就是全量数据,OK,那我们要做的事是什么呢?那其实就是把全量的数据load到我们o Dis层每一张业务表当天的分区当中,那也就是14号的这个分区当中,好,这是第一天,OK,那随着时间推移,我们来到第二天,也就是2020年6月15号啊,那15号的时候呢,我们拿到的数据就不一定是全量的数据了啊,因为从第二天开始,我们不同的业务表就会采用不同的同步策略啊,有可能采用增量同步,有可能采用。
01:41
全量同步啊,也有可能采用新增及变化同步啊,那总之不管它采用哪种同步策略,实际上我们这儿要做的事儿很简单,那就是把15号同步过来的数据啊,装载到我们ODI层业务表的15号的分区里,那其实我们要做的呢,也是一个漏的操作啊好,那从我们第二天开始以后每天要做的都是相同的操作了啊,是这样的啊,那大家可以呃思考一下啊,虽然我们第一天和后续每天做的操作都是一样的,呃,其实都是执行的一个漏语句对吧?但实际上我们第一天和后续每天它同步的数据是不同的,对吧?那第一天我们不管哪张表,咱做的都是什么呀,都是全量啊,对吧?那从第二天开始呢,我可能就是诶增量可能是全量,可能是新增界变化啊,这块呢,大家需要去注意一下,OK,那这就是我们的装载思路。
02:34
好,那呃,这里边我们还有一个细节需要注意一下啊,注意注意注意哪个细节呢?那我们和之前的那个ods层的log表做一个对比,那ods层的log表我们往这个表当中去导数据的时候呢,我们做了两步操作对吧?一个是load,那一个呢,是对load过来的数据建立这个拉泽罗文件的索引,对吧?但是咱们要注意一下啊,我们这个业务表只需要执行一个load语句就够了,就不需要再去创建索引了,这是为什么呢?那咱们现在去看一下啊,找到我们现在这个业务数据的路径啊,应该是DB里边,对吧?咱们随便找一张表,比如说以它为例,咱点进来,点进来你会发现啊,这里边是不是拉泽勒文件已经有索引了呀,对吧?这个索引是什么时候创建的呀?啊,其实这个索引呢,是我们使用scoop导数据的脚本,把数据导到HDS上之后,那我们就对他建了这个索引啊,那所以说索引已经创建完成了,所以说我们这儿呢,就不需要再重复的创建了。
03:34
啊,这个呢,是大家需要注意的一个地方,OK,那也就是说我们往ods层的业务表当中导数据,只需要执行一个漏语就可以了,这个非常简单啊,我们就不再单独写了。和日志表一样啊,咱们的业务表呢,也需要把装载语句封装到一个shell脚本当中啊,那咱们接下来呢,就直接去看一下这个最终的脚本是怎么写的啊好,我们往下翻,大家注意观察一下啊,那这个位置呢,我们一共有两个脚本对吧?那一个脚本呢,叫做首日装载脚本,那一个呢叫做每日装载脚本啊,那简单说明一下啊,首日装载脚本我们只需要在数仓上线的第一天执行啊,其实就是做历史数据的初始化用的啊,那这个每日装载脚本呢,是从第二天开始需要每天重复执行的啊,那大家可能会想了,为什么刚才我们的日志表没有首日和每日的区分的,给大家简单说一下,因为日志表我们是没有历史数据的,对吧?那所以说我们是不需要区分首日和每日的啊,但是因为业务数据是有历史数据的,那所以说我们在第一天的时候呢,需要做初始化,那所以说需要去区分首日和每日啊,这是大家需要注意的,OK,那现在我们把两个。
04:47
我们打开看一看里边的具体内容,那我们先看第一个脚本啊,来把它粘出来。来往下拉,拉到最底下,好,这就是我们的首日装载脚本,好,我们新建一个文件啊,CTRLV,来一起看一下这个脚本的内容,那首先这个位置声明了一个变量APP等于j ma,这个不再解释了,然后看一下下边这一段啊,看一下它的逻辑是什么,那它的逻辑呢,就是判断第二个参数是否为空,如果不为空,那就把do date赋予这个,呃,那就把这个DOLLAR2的值赋予do date变量啊那否则的话呢,那直接退出啊,让我们去传入一个日期参数,那也就是什么意思啊,也就是说我们这个,呃,脚本要求我们必须得传入一个日期才可以,对吧?啊,这是大家要注意的啊好,那接着往下走,那下边呢,大家可以看到啊,呃,其实下面就是什么?就是每一张表的load语句对吧,没错吧,每张表的漏斗语句我们都给它写好了啊啊,那当然这个写法呢,跟ODI层的那个日志表的漏斗语句写法是一样的啊好,那现在我们往下看看到来到最底。
05:55
底下。最底下,那最底下呢,我们这儿呢,做了一个case,这样的一个判断啊,那判断呢,就是第一个参数,那如果第一个参数等于OD in,那我们就执载,那我就装载哪张表啊,然后往下翻,那如果我传的是奥呢啊,那我就把所有的表都给它装载进来啊这就是我们这个脚本的呃,内容啊,其实很简单啊,好,这是首日装载脚本,那接下来呢,我们再来看一下每日装载脚本啊,往下翻往下翻。
06:35
来,把这个内容也拿出来。来CTRLC啊,给它创建一个新的文件来放进来,好,那这就是我们的每日装载脚本,那每日装载脚本跟刚才有啥区别,我们来看一下,那首先第一个那还是声明的一个变量啊,那接下来看这一段代码,那这一段代码呢?那现在是什么逻辑啊,是不是也是判断第二一个参数是否为空,如果不为空,那就把第二参数的值赋予do date变量,那否则的话呢。
07:04
啊,否则的话,哎,我就让他自己去计算前一天的日期啊,没错吧,是这样的啊,那实际上正常情况下我们这个每日装载脚本啊,去调去进行每日调度的时候呢,实际上是不需要传第二一个参数的啊,我们就应该让它自己去获取前一天的日期啊,是这样的啊好,那这就是我们呃这个do内的变量啊,它的一个处理,那显然这个位置跟刚才咱们首日装载脚本是不太一样的啊好,那接着往下翻,下边呢,仍然是呃每张表的装载语句,仍然是每张表的装载语句啊那OK,到最后啊,大家来看一下这个位置,那是不是仍然是使用一个case去判断呀,对吧?那如果说我们到一那等于ooo,那我就装载这张表,那等于它,那就装载这张表,那如果我们传的是奥呢?哎,那就装载所有的表啊,OK,大家看起来好像这两个脚本区别不是特别大对吧?啊,但其实是有区别的啊,一个主要的区别就是什么呢。
08:01
首日装载脚本呢,我们会去装载地区表和那个省份表,那也就是如果我们传澳的话呢,这里边会去装载咱们的省份和地区表,我们看一下能不能找着,OK,在最后来在这个位置啊,啊,一个是base province,一个是base region啊那我们每日装载的时候呢,诶,其实是不会装载这两张表的啊,这是它俩的一个主要区别啊OK,那这就是我们的两个装载脚本啊,那现在呢,我们把这两个脚本呢,都给它创建出来啊,CTRCTRLC,那放到我们这个还做过102的并目录里边,把我们给这两个脚本起个名字啊,先起第一个,那第一个呢,我们还是遵循之前那个规则啊呃,目的地到数据,呃,数据源到目的地对吧?那这个数据源应该是哪也是HDFS对吧?那也是到ods,只不过这回呢是DB对吧,然后后边呢,我们首日装载呢,我们加一个以ne这样的一个后缀啊,表明它是初始化脚本ait啊,然后按一下I。
09:00
这时候我们把这个脚本的内容给它粘进来,然后给它关闭shiftc,好,那我们再把另一个脚本也创建出来,那另一个脚本呢,我们应该,呃,把这个隐匿的后缀去掉,因为它不是初始化的脚本,它是每日状态脚本,然后按一下回车,呃,接下来我们把这个脚本的内容给它粘进来,Ctrl a ctrl c。然后粘贴进来,好,那然后shift cz2个脚本我们就都创建完毕了,那接下来呢,我们执行一个change moded加X这样的一个呃,授权语句啊,我们授予这两个脚本执行权限,那直接用一个星匹配一下就可以了啊,然后我们直接这个回车,好那现在这两个脚本我们就都加上了执行权限了,OK,那接下来呢,我们就执行一下这个首日装载脚本,把我们这个14号的全量数据,诶,装载到ods层的业务表的第一天的分区当中啊,因为我们现在假定的日期就是6月14号对吧?所以说我们现在应该执行首日装载脚本,那每日装载脚本什么时候执行呢?那是不是得等14号过去,我们有了15号的数据之后才能执行啊,这个大家要注意一下啊,那所以我们现在直接执行点杠,然后呢,来一个呃HDFS到ods DB,然后后边注意加一个以ne.sh那完了之后呢,我们传一个O啊,后边2020杠零六杠幺。
10:19
乔四,那直接回车。好,那这个时间呢,可能比较长啊,那我们把视频先暂停一下,好,那我们这27张表呢,都已经装载完毕了啊,那接下来我们打开data gra去抽查一下看看,哎,是不是啊,这个有数据啊,那比如说我们看第一章。OK,里边是有数据的,对吧,那再抽查一张,这个也没有问题啊,那这个也没有问题,那27张表呢,我们就不再逐个的去查看了啊,那这块呢,应该是。
我来说两句