00:00
好,我们开始这个写这个circle了啊,那写这个circle呢,我们首先先明确啊,咱们往这张表里导出去的这个方式应该是哪种,是不是肯定是insert加select的格式啊,那么就有insert,那后边加什么呀?啊正常是不是into啊,那这边比如说into啊,啊into后边加谁加上table啊,Table加谁表明呗,Dwd slo对不对,那后边呢,直接select吗?直接select吗?哎,还不行,为啥呀,这是不是分区表啊,分区表是不是也得指定分区啊,所以说partition永远别忘了啊,Partition dt等于2020杠零结零六杠幺四啊,给它写上,它后边写select,那select我们先不说选什么啊,咱们先明确。我从哪张表里选?咱们后续做需求也是一样的啊,拿了一个需求之后呢,你不要着急,你要选什么,你得先去分析啊,我想做这个需求,那我的数据应该从哪来,是不得把这些数事先得搞清楚啊,咱们现在表还少啊,日志表只有一个,就ods log这个没得选,那你等到后期咱们做需求的时候呢,你就会发现啊,我可能我从哪张表里查数去,我得考虑一会儿,因为表太多了,好几十张表啊,对吧?那这张没得选,那直接就是谁来的from ods啊,哎,From咱们o slo啊,那from它的话,那过滤条件咱们需不要写呢?
01:27
要不要写呀,那肯定是要写的呀,首先第一个要过滤的就是啥。首先第一个要过滤应该是啥呀?是get接s object like start吗?是那个吗?不是,你得先把谁过滤出来,先把日期啊过滤出来,先按分区过滤对不对,那分区我是不是得先把这一天的拿到啊,就为咱们数据是不是一天一天的算呀,对不对?所以上下这个天的关系得对应才行,这个天呢,我是不是也是用分区过滤来把它拿拿过来那啊,放在这啊,那接下来呢,再补充一个过滤条件啊,那这次就应该是啥了,应该是get杰object啊,那咱们应该尝试的获取哪个字段,是不是烂那个star字段呀,对不对,那从谁里边获取呀,是不是从这张表当中的唯一的一个字段里边去获取,是不是就是烂字段呀,对对,那咱们拿过来把这个烂放在里边啊,烂啊,然后逗号后边获取谁,是不是获取那个Dollar点应该是谁呀,是不是start啊,就直接start那完事,当然咱们得要什么样的,得要那个部位not吧,也是is not not是不是获取这样的。
02:32
OK,那相当于我们现在已经能拿到所有的启动日志了啊,我们先来select星,你可以先看一下啊,把这个执行一下,咱们exer先不执行,先执行select啊,我看下边那个启动成功没有啊,成功了来咱们执行啊。可以先看一下这个结果是什么样的,你看啊,这个咱们获取到的是不是就是所有的启动日志了,这里边都有star的字段啊,肯定是都有star字段的啊,那咱们就不再一点点展开了啊,这个字段比较多啊,都有点字段啊,完了之后呢,那剩下的事是干啥?是不是就是把我们所需的字段一个一个的得给它解析出来呀,对不对,得解析出来啊,那当然你要想解析的话呢,最好怎么办?是不是最好拿出来一条日志,然后照这个日志去写呀,因为这个字段名是不是可能不是一模一样的呀,对吧,咱们copy一下,Copy一下之后呢,我给它解析成一个这个呃,比较好看的一个结构啊,来咱们解析一下。
03:28
这个打开其子美化工具啊,CTRLV啊,像这种小工具呢,就是大家平时可以用起来啊,还是比较方便的,来咱们给他截个图吧。来F3来给它盯在这儿啊,第二之后呢,那咱们就开始照着这个日志去解析咱们这个数据了啊来照着日志,那首先我们所学的第一个字段是什么呢?当然除了日志啊,还得照着这个表去解析对吧?啊来CTRLCF3来把这个键面语句呢,也给它定在这个位置啊,咱们。把它挪一下来来,你就照着这个写就行,来左边日志右边是表,那你就一个一写呗,第一个字段是啥?第一个段是area code对吧?那我其实对应的应该是common里边的这个AR对吧?那你就直接select,是不是就get接son object,然后里边放谁是不是还是那个烂字段啊,因为只有这一个字段嘛,那玩后边呢,我们再来一个Dollar,点谁comon,然后点A,那第一个字段是不是咱们就拿到了啊,那剩下所有的字段是不是都是按照同样的方式从这里边去获取就可以了,对不对啊,就是这么简单啊,那这个呢,我就不再重复了啊,咱把这个文档上的那个serve呢给它粘过来就行啊,都是一样的写法。
04:42
来,把它拿下来。啊,这个对大家来说应该没有什么难度啊,白送一个啊相当于啊跟着C。哎,放在这儿。CTRL,喂啊好,那你把这个补全就行了,那剩下所有的这个东西都是这么写啊,OK,那这条circle咱们就搞定了啊,就搞定了啊,然后在这里边呢,有一个小细节需要给大家强调一下啊,就是关于这个insert的时候呢,我们是采用into还是采用overwe。
05:11
啊,首先先明确啊,Into跟right有啥区别,那into呢是追加到这张表里对吧,那right呢是覆盖,什么叫覆盖。覆盖是不是原来的数据全部干掉,然后把这个新的数据放进来,哎,这叫覆盖over right啊,那在这里边咱们选什么呢?哎,其实我们在这呢选用的是over right啊,这会为什么用over right啊,给大家解释一下。啊呃,其实从D达D层开始啊,我们这个数据的装载方式是不是都是insert的方式了呀,就没有漏的了啊,就没有都是insert的方式,那都是insert的方式呢,我们就呃考虑到这样一个问题啊,就是咱们尽可能的保证这个circle它这个任务呢,是能够重复执行的,是可重复执行的。啊,为什么重复执行啊,是这样的啊,大家解释一下,因为呢,在我们这个整个的这个数据仓库搭建完之后,咱们这些任务是不是都要交给阿斯卡的去调度啊,对吧?那交给他调度的时候呢,我们一般情况下会给他设置一个什么呢?啊就是失败重试啊,因为这个大家想一想啊,我这个数据仓库我就整个流程去交给他自动调度的时候,是不是有可能啊,我提交这个任务的时候,那现在假如说集群当中没有啥了呀。
06:23
没有空余资源了,没有空余资源,那咱们这个任务是不是就得等着呀,对不对,但是等的时候咱们有有时候是不是可以给他配一个超时时间对不对?超时之后这个任务是不是自动取消,那这个任务是不是就会失败呀,对不对,那失败之后呢,我会让他怎么做呢?我是不是会让他重试啊,对吧,因为假如说真的就是这种没有资源,那我是不是等一会儿再提交他就能成功了呀,对不对,那这样一来的话,就是有可能会有一些这样的,假如说我在一个脚本当中,我写了多张表。我写了多张表,那有可能我是不是前几张表成功了,然后呢?诶后几张表失败了,那这个任务要重新跑的时候,是不是得全部都重新跑啊,对不对,那这样一来,我这个任务我最好让他能够可重复执行啊,所以可重复执行呢,就是啊已经成功了,我再执行一次,哎这个跟结跟刚才结果是不是还是一样的呀?哎,咱们能够实现一个这样的效果啊,那其实这个效果说的高大上一点,那就是什么呀。
07:18
说刚才就是保证一个任务的一个幂等性啊,就是我重复执行多少次,是不是最终的结果还是一次啊,跟一次是一样的,所谓的幂等性啊,就是保证它重复执行,那用in right是不是就可以实现这个效果呀?啊是这样的,但是咱们那个ods层。啊,从HDS往ods层导,咱们能实现幂等吗?那个行吗?那不行,那个重复执行不了,为啥呀。因为它是漏的,漏的是什么?漏相当于剪切嘛,对不对,咱们前面给大家演示过了啊,剪切是不是原来那个地方的文件就没了呀,你再重复执行是不是就会报一个找不到那个文件的错误啊,对不对,那个是没有办法的啊,但是从DWD开始之后呢,我们都是可以保证这个重复执行的啊,这一点咱们搞清楚啊,行,那这个就是我们一个完整的circle,这就搞定了啊,当然这个circle最终咱们还是要怎么做呀,是不是给它放到一个shell脚本当中啊,放到一个脚本当中,放到脚本当中之后呢,咱们需要把这里边所有的哎,日期是不是得替换成Dollar do date,然后呢,在所有的表明前面得加啥。
08:23
加库名吧,对不对,因为放在脚本当中,是不是它默认用的是default库啊啊,咱们需要加上库名,加上积贸点啊,这个表面主要就是注意这两点就行了,时间替换成the date,然后呢,表明前面加上库名就完事了啊OK,那还是一样啊,咱们在这呢,就只是给大家演示一下这个select ins inside呢,我们还是使用脚本在insert的啊来看看这个呃,S赖数据对不对啊,来咱们执行一下这个S走。OK,你看这个数据是不是就解析成一个一个的字段了呀,来,咱们想要的就是这种效果啊,就是这种效果啊,OK,那搞定来,我把这个视频录一下啊。
我来说两句