00:00
啊好,那接下来呢,咱们把这个ods层的业务表全部都给它建出来,一共应该是多少张啊,十二十八张应该是对吧,15张全量,13张增量对吧?好,那现在我们统一的创建一下,那当然我需要把这些表先都给它,呃,复制出来啊,把这个界面语句拿过来,应该是到哪到这个位置28张了对吧?诶CTRLZ咱拿过来,拿来之后呢,我们新建一个文件CTRLV,呃,在这我需要先给它处理一下啊,把这个标题都给它删了,我直接CTRLF,我加一个啥呢?应该是都是七点二点几对吧?那我们就七点二点,然后边带来一个点星,那是不是就选中了这28个标题大家对吧?啊,那完之后选中之后删除CTRLCTRLC,那之后呢,我们就给它放在这里边,直接都给它创建出来就行了,我把之前咱们复制的那两张表全给它删了,那个键面语啊给它覆盖掉,CTRL拿过来,那之后呢,我们来到最开头找到我们的这个第一张这个业务表来全部选中对吧,直接诶CTRL回车执行就完事了啊这个咱稍微的等一会儿啊呃,稍。
01:00
稍等一会,稍等一会儿,呃,应该是差不多了,大家注意观察一下啊,我这个位置现在一共有多少张表,一共有29张对吧?呃,当然有些同学这个位置可能你不显示那个29啊,这个跟什么有有关系呢?跟咱这个date的版本有关啊,我给大家发的是2020年的版本对吧?我这个版版本可能要稍微的要新一点啊,是这样的啊呃,你要是想有有这个东西,你自己去下一个对应版本的那个安卓包,但是版本不能太新,得是2021.2.2以下的才行,要不然那个不好用对吧?啊,这个大家知道怎么回事啊,现在现在咱们继续往下进行啊呃,那我现在呢,这个一共是29 29对不对呢?应该是对的,日志表有一个,然后28张业务表对吧,没问题,行了,表咱们就都建好了,那接下来呢,我们就去看一下,最终呃,这个业务表的数据状态脚本是什么样了,那就完事了,OK,那接下来呢,我们还是把这个脚本给它直接拿出来,咱们一起看一下就行了,这个其实也比较简单啊,来,拿过来,拿过来,呃,这个脚本呢,相对来说要比刚才那个日志表的脚本稍微的复杂一点,呃,复杂在哪呢?
02:01
因为刚才那个日志表的脚本是不是只管一张表就行了,对吧,然后咱现在这个脚本是不是得管29张表啊,28张表对吧,所以稍微的麻烦一点啊,好,那其实也不是太复杂,我们把它拿过来一起看一眼就行,我调一下这个文件的格式啊,调成呃这个bash。好了,现在咱们一起来看一下这个整个脚本的这个内容,那首先需要给大家明确的一点就是啥呢?就是将来咱这个脚本怎么用啊,怎么用这个脚本我们将来用的时候呢,你需要给他传两个参数了,刚才那个日志表的脚本是不是只传一个日期就行了呀,对吧?啊,这回咱们得传俩啊,这个为啥传俩呢?给大家说一下,首先这俩参数是谁啊?第一个参数是什么?表名我是这么设计的啊,脚本的第一个参数表名,第二个参数是什么呢?是日期啊,是这样的啊,也是在这呢,我们是不是比刚才那个脚本多了一个表名的参数啊,对吧,为啥呢?因为这个脚本我要管28张表,对吧?刚才那个是不是只管一两表对吧?所以那个就不用传表名了啊,是这样啊,那这俩表这俩参数它的含义是什么呢?啊,就是说我传哪张表它就导哪张表的数据,我传哪个日期,它是不是就导这张表哪一天的数据啊对吧?诶是这么去设计咱们这个脚本的使用逻辑的OK啊好了,那接下来呢,我们就来看一看咱们整个脚本,呃,它具体的逻辑是什么样的啊来我们点进来看一看,那首先我们。
03:15
先看这个位置,看这啊这一段代码大家应该不不陌生了,对吧,它还是在干啥呢?是不是还是在对do带的这个变量进行一个呃维护啊对吧,那这边呢,你看他怎么做的啊,是不是这回判断的是第二个参数是否为空的呀,对吧?因为我们现在是第二个参数是日期了,对不对,这个一定要搞清楚啊好,那现在我稍微的问一下大一个小问题啊,你说我这个脚本啊,我在设计的时候,我能不能让第一个参数作为日期,第二个参数作为。这个表明了能不能行。能能不能这么去设计,那就不行了,为啥啊,因为你都知道啊,就是咱们这个日期其实是一个可选的参数吧,对吧,日期是可以传可以不传的,对不对啊,是这样的,那完了之后呢,你要把日期放在前边,你假如说你传它的时候好,那我第二参数是表明,那我要不传它呢,那是不是他就那个后边那个参数就变成第一个参数了,对吧?那所以说这种可传可不传的可选的参数一定要放在后边,这个一定要注意一下啊,体会一下好了,那接下来咱们继续往下走,那现在呢,我就判断第二参数是否为空,如果不为空,那就do代等于咱们传的,哎,如果为空呢,是不是还是计算前一天的日期啊对吧,就完事了,这个比较简单,行了,那这个完成之后,我们继续往下走,下边注意观察,这我这儿是不是声明了一个函数啊,对吧。
04:32
对吧,我这升为了一个函数啊OK,好,那我这个函数,那它具体的逻辑是什么呢?它叫做load date函数对吧?好,那现在呢,我给大家明确一下,就是咱们这个函数它的具体逻辑什么这个比较重要啊好,我先给大家明确下这个函数我是怎么设计的,首先这个函数呢,它接收哎若干个参数,比如说你传多少个参数都行,对吧?那每个参数是个什么呢?每个参数只带只带的是啊只应该是第第四一个对吧?哎,只带一一张呃这个呃,Ods层的表明啊,或者就直接就视就就别指代了啊,每个参数就是哎一张ods层的这个表的表名啊,就是这样的啊OK,那完之后也就相当于我们将来用这个函数,你怎么用呢?哎,比如说直接调用load date,然后呢,是不是就可以给他传ods,诶第一张表ods表,是不是给他传一大堆ods的表就完事了,对吧?好,那完事之后,那他就会做什么工作呢?他就会把这些表。
05:33
表的数据统一的进行一个漏的操作,诶好,那现在我们来看一看这个东西到底是怎么去实现的啊,其实很简单,来,那咱们现在一起看一下,首先呢,我们刚进到这个函数的时候呢,它这是不是声明了一个三字符串啊,对吧?注意这个字符串目前是一个什么,是一个空串对吧?是一个空串啊好,那接下来往下走,下边中间这有一个什么。循环吧,这是对吧,For循环结束之后,你看他立即做了一个什么操作,Have-1CIRCLE对不对?那你其实可以琢磨琢磨,你说在for循环里边我们做了什么工作呀,是不是就是在拼词后语句啊,对吧,因为你最开始是空的,你来了一缝循环完了之后呢,我这就可以执行了,那肯定是在拼词语句呗,对吧?好,那接下来我们看一下它怎么拼的啊,那首先在这儿呢,我先去执行的一个for循环嘛,对吧,For循环我遍利的是什么呢?是Dollar星,大家都知道Dollar星指代的是所有参数,对吧?谁的所有参数是脚本的吗?
06:26
不是,它是有作用域的,对吧,我现在当然是位于函数当中,那显然就是这个函数的是不是,诶每个参数啊,对吧,那函数的每个参数是什么来着。是一个一个的ods层的表名,对吧?啊是这样的啊,OK,好,那也就是我现在实际上是在便利ods层的这些表名,好那就来继续往下走,那下边呢,我在便利的时候,我看我每一轮循环里边的逻辑是什么啊,首先我上来我先做了一个这样的操作。这是在干什么?在执行了一个什么?Hi do FS?这是hi杜给我们提供的命令,对吧?然后后边杠test,杠test是干什么,是不是在做测试啊,对吧?测试什么东西呢?杠E,然后后边呢,指向了一个什么东西,指向了一个路径,注意观察这个路径是哪的路径是origin date那个路径origin date其实就是什么?就是我们ods层某一张表的这个数据的来源吧,没错吧,其实它相当于这是在判断,判断什么呢?我告诉大家啊,它实际上就是在判断啥,就是在判断OK,我这张ods层的表,它来源的那个路径是否存在。
07:33
啊是这样的啊,因为啥,因为你得保证它怎么样你才能漏的,你得保证那个路径存在,你是不是才能从那漏的数据啊,对吧,要不存在我去漏的是不是就报错了呀,对吧?OK,那同学可能会想了,哎,我这个路径还有可能不存在吗?有没有可能不存在?那其实有可能不存在啊,对于谁来说可能不存在的,对于那种增量表而言是可能不存在的,为什么?你想一想啊,什么增量表我们只同步什么来着,新增级变化吗?对不对?那有没有可能这张表我今天就是没新增,就是没变化,有没新增没变化是不是我们那个or date下边就不会有这个表的数据啊,对吧,没有你直接漏的就会报错了,对不对?但是对于全量表而言,它肯定是有数据的,这一点体会一下啊,所以在这其实咱们做这个判断主要是为了做给谁判断的,主要是为了给那个所谓的增量表去判断,好,那这个呃做什么咱们搞清楚了,接下来我们再来看一看,就是这个呃,小小命令对吧,它具体的语法是什么样的?那首先我们先看一下前边。
08:28
这个hi doop FS,然后呢,杠T的杠E啊这个东西,这是hi duop,它为我们提供的一个命令啊,是这样的啊,那这个东西到底怎么玩呢?其实你可以看一下它官方的这个说明啊,呃,直接在这儿你执行一个什么就行了,你就执行一个hi豆FS,后边呢,你可以杠说号呀,那个hellp,那完了之后,我们刚才是不是用了一个它里边的所谓的呃,T子的命令啊,对吧,那完了之后你就告诉哈谁就完事了,T子是不是就完事了对吧?直接回车啊,那他就会给我们打印出来你这个T的命令的用法,那我们用的是哪个参数是杠Z对吧?杠Z杠杠杠E是吧?杠E啊杠E,那杠E什么意思呢?看一下他说RETURN0IF这个路径存在对吧?也就是路径存在是不是就返回零,路径不存在就返回一啊,对吧,就这个意思啊,是这样的,所以我是可以根据它去判断某个路径是否存在啊,对吧?啊就是这个逻辑好的,接下来我们再往后看,我们看一看这个路径咱们这是怎么去维护的啊,那首先呢,在这儿前边。
09:28
内这是不是就是都固定的呀,对吧?然后这是不是有一个Dollar APP引用的是不是就是j ma对吧?然后往下走,下边是不是就DB对吧,DB这其实已经对应到我们哪层路径了,是不是已经对应到这一层路径了,对吧?这个都没啥问题,然后我们继续往下走,理论上再往下,下一层应该是啥?是不是应该是这样的一个什么active或者其他的一个路径啊,对吧,应该是这样的吧?啊,然后大家注意观察,你看我这怎么写的。我这是不是直接放了一个这个东西啊。Dollar I冒号四对不对?这是啥意思呢?来给大家简单说一下啊,首先呢,Dollar I冒号四大家不知道是,但是Dollar I大家应该知道是啥吧。
10:06
对吧,是啥。Dollar I是不是就是我当前便利的那个呃,表名啊,对吧,这是不是就是那个I呀,对吧?那咱们便利是不是一个一个的ods表名对不对,也就是我这儿其实Dollar I你拿到的是一个ods的表的表明,那我这个冒号四是在做什么呢?是在对变量进行字符串截取啊,Dollar I冒号四的意思就是什么呢?获取我这个字符串第四个字符以后的内容。啊,这样的啊,由于我们这给他传的是什么,你给他将来传的是不是应该是ODS的一个表名啊,对吧,但是你要知道这个表对应的那个or date下边的路径前面有ods吗。没有的,这儿是不是还没有什么ods这个概念啊,对吧,对不对,那所以实际上在这我们就是为了干啥,是不是把ods那个表明前面的ods下划线给它去掉啊,对吧?去掉之后是不是这个表名就能够对应上我们前面这个路径来,对吧?啊,就这么个逻辑啊,也就是说这儿实际上是为了截取我们这个第四个字符之后的内容,好了,那这样一来,我们是不是就准确的找到了这张表所对应的or date的那个路径啊,对吧?然后再我这儿呢,是不是还有一层就是日期,日期在这儿是不是用那个Dollar do date去替换就行了呀,对吧?好了,那这样一来的话呢,我们就能够去判断咱这张表对应的那个or内的路径是否存在了,OK啊,存在,我再进行相应的,诶这个漏投入OK啊好,那在这儿呢,我给大家测试一下这个hi度FS-T杠一这个命令来在这儿呢,我们比如说我执行一下这个命令,那之后呢,呃,后边是不是得跟上一个具体的路径啊,对吧?好,那在这儿呢,我们就以它为例,以它为例,那拿过来CTRLC,那放在这呢,我们就给它OK,直接回车就完事了。
11:42
好,那现在没有啥反应对吧?那在这我们怎样去测试它到底存在不存在了,刚才说了它如会输出零啊,对吧?那我怎样获取它的这个结果,到了问号是不是就获取上一个命令的结果,对吧?直接回撤,你会发现是不是返回来就是零,说明它是存在的啊,是这样的啊,那如果在这儿你比如说我随便的给他写一个,哎,什么乱七八糟的东西,对吧?那这个理论上应该是怎么样的,应该是不存在的才对,对吧?那它返回的是不是就是一赖啊对吧?哎,这个搞清楚就行了,行了,各同学,那截止到现在这个命令呃,怎么用,咱就搞清楚了,好,接下来继续往下走啊,你看我下边是不是就做了一个if判断呀,对吧,这个也很简单,If附什么呢?Dollar问号等于零是不是就是我前面的这个东西,呃,路径是存在的对吧?存在你看我现在执行它了吗?我并没有执行,我存在我就干啥了,我是不是给它拼到这个circle字符串上面了,对不对,怎么拼的这么编啊Dollar诶,这个circle对不对?是不是就直接引用原来的这个circle字符串啊,对吧,刚第一轮肯定是空啊,然后后边是不是直接就给它拼上了这个一个load语句啊对吧?在shell当中我拼字符串我用不用写什么加号什么的用吗?
12:42
用用写吗?不用你你加入当中,你要拼的出,是不是写一个加号就完事了,对吧?Shell里边你要拼是不是这俩直接一挨着就算拼上来了,对吧?就这个逻辑吧,OK,那这是引用前面的,然后呢,把当前这张表的这个诶load的余额给它拼上,诶那就完事了,OK啊好,那这样一来,经过这个for循环之后,那circle里边还是空的嘛,就不是了,他已经把什么样的circle拼进去了,就是今天有数据的那些表是不是就会拼到我这个circle字符串里边,对不对,没数据的那不是就不拼了呀,对吧?好,那完成之后呢,我在这统一的在执行一个have circle have-1CIRCLE是不是就把那些表都给它漏进去了,对吧?哎,就是这么个逻辑,哎,这实际上就是咱们这个漏的函数的核心语法啊,当然呢,有的同学他可能会纠结呀,呃,昨天晚上还有人问我呢,说这样的择课脚本,这个删药脚本,我其实我不太写的出来啊,可能有同学这个删要写的比较少啊,其实你觉得这个东西难吗?
13:34
它不难,这已经很基础了啊,但是大家写不出来,可能因为什么呢?对这个语法不是特别的熟对吧?那这个语法呢,其实你写多了也就熟了啊,或者说你这也有小技巧,比如说你就用这个sublime对吧,Sublime呢,你把它的这个语法调成什么,调成BA完这里它就能提示语法了,比如说我想写一个for循环,那你就直接for for,然后I来一个I,那不就完事了吗?对不对,比如说我在这呢,我想来一个case对吧,那你就来一个case,呃,这这个直接调用,那就完事了对不对,你那个语法也不用太去记记记对吧,你大概知道他这个怎么去用就完事了,是这样的,那这个基本的善脚本大家还是需要去掌握,还是得会写的啊,行了,那这个,呃,漏的这个data咱们就讲完了,接下来我们继续往下看。
14:15
下边是不是就是一大堆的什么case判断呀,对吧,他判断的是谁,这回是DOLLAR1 dollar1是咱脚本的第一个参数对吧,第一个参数咱传什么来着。表名对不对?OK啊,你看他这怎么去做的啊,那如果你传的是这个表名,那我就是不是调用load内的函数,是不是导这一张表的数据啊,对吧?也就是说你传哪个表,我是不是就导哪张表的数据对不对,那如果你传的是奥对吧,你看我怎么做的,是不是调用漏雷的函数,然后把这些表面都传给他了,对吧?哎,是这么一个逻辑,诶这一点咱们大家需要给它搞清楚好了,那截止到现在呢,那咱这个脚本的核心逻辑就算是完成了啊来,那现在CTR肯R给他拿过来,拿来之后呢,我们现在就呃把这个脚本给它创建出来就行了,那我们现在进到加目录的这个并目录里边,进来之后呢,我们创建一个新的脚本,这个应该怎么起,怎么起名字应该叫做HDFS图哪,To o.S叫DB.sh是比较合适啊,对吧?啊,那当然这边有内容了,我先全部都删除啊,来一个DD全部删除,然后再把刚才的内容给它放进来,行了,各位同学,那截止到现在这个脚本咱就算是诶搞定了之后shift c z加一个执行权限啊,趁Mo加X HD FS to ods DB点。
15:25
行了,那现在是不是就可以去执行一下它了,对吧?来我们点杠应该是HDFS到ods db.h呃,传两三数对吧,一个是二,一个是2020杠零六杠幺四,一个是日期直接回车,那就完事了,好了,那我们稍微的等一会儿啊,那它就会把数据诶从原来的那个orange data的路径下,不是移动到我们那个warhouse下边啊对吧?哎,这一点大家理解一下啊,注意观察,你看它是不是卡在这了对吧?它卡在这实际上在干啥。实际上是不是在做,你看啊,咱们这个逻辑,你看我传的是奥对不对,传奥的话,他走哪是不是走这对吧,那走这儿的话,那是不是你给他传了一堆参数,他会先走这个for循环呀,对吧,其实他现在是在做for循环,然后去判断我们那个每个路径是否存在,对吧,是在做这个事儿啊OK,那完了之后咱们稍微等一会儿就行,还没判断完,因为咱们表比较多,咱一共多少表,28张表呢,对吧?他得一个一个去判断,好现在判断完了,已经开始去,哎执行这个S了啊呃,执行就快了啊,执行就快了,那是不是一个一个开始漏的呢?对吧?哎,稍微等一会儿。
16:28
啊,行了,那截止到现在呢,这个脚本就执行完毕了,呃,理论上我们这要没问题的话,是不是ods层的每张表现在应该是都有数据的呀,对吧?来咱们可以抽查两张啊,应该是没啥问题的,都有数据,行了,这都是全量,我们抽一个增量的,哎,这是增量,哎增量表是不是也是有数据的对吧?只不过目前这个O的都是啥都是闹对吧,为啥到时闹呢?因为我们现在类型还没有update的类型的呢,对吧?哎,这个理解一下就行了,好了,各位同学,那截止到现在我们ods层就算是结束了,哎,视频我停一下啊。
我来说两句