00:00
呃,好了,各位同学,那咱接下来呢,要做的工作就是需要去对DWDM层的数据呢,去做一个统一的装载啊,实际上呢,就是在装载之前,我们需要做一个简单的总结啊,做一个简单什么样的总结呢?大家来琢磨琢磨,就是你将来咱们这个dim层对吧,我们所有表都建好对不对,那随着时间的推移对吧,那我们在DM层会积累下来什么样的数据啊。你想啊,随着时间推移,我们是不是前面就讲过,每天都会往这个DM层的表里边去装载数据,对吧?那随着时间推移,咱们会积累下来什么样的数据呢?那对于那种每日全量快照表,是不是也就是这几张表吧,对吧?那我们会积累这样的诶一张一张的表分表,大家看一下,那首先每日全款是不是都是一个分区表啊,对吧?我们会积累下来是不是一天一个分区,一天一个分区,一天一个分区,那每天的分区里边会存什么呢?是不是就会存储当天的所有的维度对象的当天的状态啊,对吧?也就是我们会保留下来是不是每一个维度对象的历史状态,对不对啊,是这样的,那拉链表其实也不例外,当然拉链表的分区跟这个每日全量的分区是不一样的,但是它也会保留下来我们每一个维度这样对吧?对,像我们这儿就是用户对吧,也会保留下来每一个用户在每一天的状状态是这样的啊,也就是说维度层我们随着时间推移就会保存下来所有的维度对象的历史状态啊,是这样的啊,那有了这些历史状态,我们将来就能。
01:29
怎么用它了呢?哎,是不是就可以去分析将来的那些历史上发生的这个事实了呀,对吧?啥意思?比如说我分析一下历史上某一天的订单,对不对,那你要分析历史上某一天订单,那是不是就得去知历史上那一天的维度啊,对吧?那是这样的,这就是我们在维度层,维度层将将就是将来呢,会积累下来的一个数据就是这样的啊这块呢,咱们先有一个大体的印象,呃,为什么要说这个事儿呢?是因为因为咱现在呢,就是只只装载了一天的数据,对吧?就是我看大家联想不到啊,这个随着时间推移,它其实上是会有每一天的这个历史状态,这一点要搞清楚啊现在,那接下来呢,我们就继续往下走,呃,下边我们就不再多说了,我们把这个DM层的数据做一个统一的装载,呃,装载在这边,在这块呢,大家来看一下,我们一共有几个脚本,这块有两个脚本对吧?一个脚本呢,我们称之为首日装载脚本,一个呢称之为每日装载脚本,首先我给大家先明确一下啊,就是这两个脚本咱怎么用啊,首先第一点就是首日装载脚本,首日装载脚本呢,它。
02:29
它只需要我们在数仓上线的第一天,咱们手动的执行一次就够了,这是首日装载脚本啊,是这样的啊,那每日装载脚本这个就不说执执行一次就完事了,他需要怎么做呢?从我们数仓上线的第二天开始,诶每天重复的去执行,诶这是首日和每日的这两个脚本的一个基本用法,OK,那在这儿为什么咱们要去区分一个首日和每日呢?这是为什么呢?那其实主要是考虑到谁考虑到这个用户维度表,那这用户维度表咱做的是一个拉链表对吧?拉链表它的首日装载逻辑跟美装载逻辑是不是不一样,对吧,我们是不是写的两个三号对吧?哎,那所以说在这儿呢,首日装载脚本当中,那这个用户维度表的装载语句,那就是那个首日的circle对吧,那每日脚本当中呢,这个用户维度表的语句就是那个每日的circle,这个一定要注意一下啊,但是其实对于其他的那种每日全量快照表而言,它的首日跟每日有区别吗?
03:27
没有区别对吧,所以说这几张表在这俩脚本里边,那个装载的circle都是一样的逻辑啊,是这样的,其实这主要是因为这个用回度表分了一个少人每日,所以说咱为了方便我们给他写了俩脚本啊,OK,然后还有一个小细节需要注意一下,就是这个日期维度表,大家想想你说个日期维度表需要包含在咱这个脚本里边,不需要哎手这个日期维对表,咱是不是就是手动的去给他装载一下,那就完事了,对吧?那我之前在讲这张日期维度表的时候,是不是就已经完成了这个数据的装载呀,对吧?所以说那这时候咱们就先不用考虑它了啊,OK,好,那这就是咱这两个脚本的一个基本的介绍,OK,那接下来呢,咱就把这两个脚本快速的给它创建出来,我们先看第一章,呃,首日装载脚本来给它拿过来,脚本稍微有点长啊来,咱现在先给它CTRLC粘出来,我们先简单的看一看这个脚本,然后呢再去创建,其实脚本非常简单,呃,来吧,那现在我们简单的看一下这个脚本,首先我需要给大家明确的一点是什么啊,就是咱这个shell脚本,我们的用法是什么,用它的时候呢,仍然是传两个参数,第一个参。
04:27
这是什么,是表明啊对吧?第二个参数呢,是日期,注意这个日期呢,在这儿就不是可选的了,对吧?因为这个脚本前面说过,咱是不是只需要在首日的时候装载一次就执行一次就完事儿了,对吧?那这时候呢,就不能让他说每天获取前一天的日期了,诶我们在这儿呢,就直接给他传一个具体的日期,那就完事了对吧?哪天上线你就传一个哪天的日期,那就OK了啊这个大家稍微的注意一下啊呃,那所以在这儿呢,呃,咱们这块这个第二参数是必传的,不是可选的啊OK,好,那咱接下来就继续往下进行,呃,现在我们来看一下这个脚本的核心的逻辑,呃,这块其实比较简单了,首先在这儿先看它,这实际上就是在维护那个do date变量,对吧,你看这回这个逻辑跟之前是不是相比有点区别,怎么做呢?是判断了一下第二参数是否为空,对吧,如果不为空,Do date是不是就等于到那啊对吧,如果如果为空呢。
05:17
唯空他计算前一台日期了吗?没有,是不是直接给咱们提示了一个请传入日期参数,然后就直接退出了呀,对吧,也就是说你这个不传日期它不执行啊,这个要注意一下行了,那完成之后咱继续往下看,下边呢,实际上就是我们每一张维度表的首日装载的circleol语句了啊,当然呢,对于那些每日全量快照表,其实不用区分首日每日啊,其实主要是针对谁,针对的是一个拉链表对吧?你看拉链表这块咱用的是哪个,是他那个首日装载的S吧,对吧,这是比较简单的那个词,应该能看出来这是首日啊好,那玩下边的就是我们其余的表的这个circle语句,那每一个表是不是后边会有一个circle字符串啊对吧?好,那下来往下走看最底下咱们怎么做的啊,最底下往下走走走走走走走。
06:03
诶来到哪来,诶还没到,最近到了OK,在这个位置,那这个位置呢,我们实际上就做了一个这个case判断,对吧,这回咱判断的是谁呢?是不是还是到位一,到位一前面说的是什么来着,是第叫表名对吧?诶你这块是不是就是传哪张表的表名,我就执行哪张表的那个circle考L语句啊,对吧?啊然后呢,如果你传奥,那我就一次性的把所有的circle语句都给它执行了,诶就是这么个逻辑,其实非常简单啊呃,然后这个脚本大家稍微的注意一下,呃,哪地方就行了,就是注意一下这个circle啊呃,咱们这个circle写完之后,你放到这里边来,呃,是不是有些地方咱们需要注意一下,对吧?其实主要就是注意两点,第一点呢,就是我们所有的日期都得用什么,用Dollar do date这个变量去替换,对吧,这是一个,然后还有一个是什么呢?就是所有的表名下边前面咱是不是都得加上库名啊,对吧?这个表面哪会有from这个位置会有表名,那insert into的那个位置是不是也会有表名啊对吧?表面就是加库名,然后日期替换成到时候对的诶就完事了,哎,这是大家需要去特别注意的一些。
07:03
法啊行了,那这个其他的就没啥了,非常简单,首日那这个脚本就完事了,接下来我们再来看一下每日状态脚本,每日跟它其实也差不了太多啊来我们往下翻,诶来到这儿,诶到到到到这个位置来CTRLC给我拿过来,呃拿来之后呢,我们把它再新建一个文件放进去啊来首先我们先明确一下这个每日脚本的这个使用逻辑是什么样的,呃,每日的脚本呢,其实是这么用的啊呃,也是先调用它,然后呢也是传两个参数,第一个参数表明第二参数日期,但是这个日期它就是可选的了啊,就是你传了就你传的,没传就自动计算前一天啊这一这个点,这个点呢,大家稍微注意一下就行啊好了,那现在看一下脚本的核心逻辑,首先上来呢,就是是不是也是维护了一个这个do data对吧,那这回就是,呃,如果传了就用你传的,没传那就自己计算前一天啊就是这样的,那下边呢,是不是就是我们每一张表的那个每日装载的SQL语句来对吧,当然也是主要针对于这个用户维度,大家注意观察,由于用户维度表。
08:03
进行每日装载的时候需要用到动态分区对吧?啊,所以在这儿呢,咱们是不是给它设置的一个动态分区的非严格模式啊,对吧?啊,注意那咱们是在这个位置写的,我是不是没有放在have set那个文件里边的吧,对不对,那所以说是不是只需要只有执行到这张表的时候,那咱们这个参数才会设为这个ne大家对吧,当这个circle执行完,这个会话结束了,是不是它这个就不生效了对吧?也让在这儿设置不会影响到其他的表啊,这个理解一下啊,行了,那现在我们就继续往下进行,呃,这个完事之后往下走,下边呢,就是我们其余的每张表的这个每日状态的S,那这个就不带一个看了啊好,那接下来来到最底下,最底下其实还是这样的一个逻辑啊,往下等是不是还是case判断对吧?传什么表名,那我就导哪张表的数据,传奥就是所有还是一个逻辑啊,比较简单,行,那现在呢,两个脚本咱都看完了,我们就快速的给它创建出来,首先我们先创建第一个首日装载脚本,呃,那这个呢,咱们也得给它起一个特定的名字啊,这个脚本大家说叫啥名比较好,是不是也是数。
09:03
元到目的地对吧?咱这个数据源是从哪啊,是从ods来的对吧?到哪呢?是不是到dim啊对吧?OK,那所以在这呢,咱们就叫这个名就行,当然由于我们这儿有首日和每日之分,所以说首日这边呢,我们给它加上一个以ne这样的一个后缀,相当于做一个首日的初始化的一个操作,对吧?OK,加一个后缀完之后呢,我们来一个这个点SSH,那之后呢,我这里边已经有东西了啊,然后我先把里边所有的内容全部删除之后呢,再放进咱这个新的脚本内容完了,完了之后shift day,那首日有了之后呢,是不是就是这个每日啊,对吧?那咱把这个隐匿的后缀去掉,就是它的每日的名字啊,来打开,然后呢,我还是把里边的东西先全部删除好,已经删除了啊,那删除之后呢,我们再把刚刚我们拿过来的这个每日的脚本给它复制一下,这个应该是每日的啊,CTRCTRLC拿过来,拿来之后呢,我们给它放进去啊,然后呢,我们来看一下,那这样一来的话,咱们这个每日的脚本内容也就搞定了,那之后呢,我们需要同时对这两个脚本是不是加上一个执行权限呀,对吧?Mode加X。
10:03
然后后边来一个ods,直接to Di'm,然后后边来一个星匹配一下就行了,对吧?好了两个脚本咱的权限就都有了,那之后呢,我们就可以执行这个数据装载,去装载咱们这个dim层的这个表了,呃,然后咱现在应该执行哪个首日呗,对吧?现在是不是14R对吧?那所以在这我们应该执行一个ods到dim,然后后边呢,跟上一个1.sh对吧,传俩参数,第一个参数是哦,第二参数呢,是不是2020杠零六杠幺四啊对吧?诶,OK,那这样一来这个参数就传好了,但是我在执行这个脚本之前需要考虑一个问题啊,什么问题?表得建出来吧,对不对,我得把呃DM层所有的表都得建出来,我可能有的没建啊,那现在呢,我们去搜一下,然后把所有的表给它建出来,呃,在这呢,我可以搜一个瑞,然后呢,应该是external对吧?啊然后table我们后边给它加上一个dim下划线,那这是不是就能够快速的定位到我们这个每个键表语句来,对吧?好,那现在呢,我们先快速的建一下,我看哪个没键date见了。
11:03
SKU建了,User建了,那应该就是活动优惠券和地区表没建对吧?优惠券咱没建,给他建一下,呃,OK,那这个建出来了下一个,呃,然后呢,这是活动刚才没建给他建出来啊,OK,搞定,还有一个就是那个地区应该也是没建的,哎,好了,各位同学,那到目前为止呢,咱们这个六张维度表应该就都已经创建出来了,这个应该没啥问题吧,好了,那接下来呢,我们就可以执行一下这个脚本了,直接回车啊,这个我们稍微的等一会儿吧,因为这个表不是特别多,所以说很快应该就能跑完啊,咱们等他跑完,然后呢,抽查一下里边的数据就OK了啊。稍微等一会儿,呃,我先把这个视频暂停一下吧,呃,好了,那这个脚本已经跑完了,那现在我们去检查一下最终的这个结果啊呃,随便抽查两张啊,这个活动维度咱们是有数据没有问题,呃,优惠券维度哎,咱也是有OK的,没问题,省份啊OK,商品OK,然后呢,用户呢,也是没有问题的啊好了,各位同学,那截止到现在呢,我们dim层就此是结结束了啊来,我把这个视频停一下啊。
我来说两句