00:00
呃,那咱接下来要做的工作就是干啥呢?是不是就是去哎,去写一个,就是刚才咱们所说的那个每天重复执行的一个脚本呀,对吧?啊,其实这个脚本写起来非常简单啊,它里边的核心逻辑应该是什么样的呢?就是我刚才所说的维护一个日期变量,是不是咱们的一个核心的逻辑啊,对吧?好OK,那这个呢,所以我们就不再手写了啊,比较简单,所咱直接拿出来,然后呢,我给大家重点说一下,就是里边大家需要注意的问题就行了,非常简单的一个小脚本啊,拿过来CTRLV好了,同学,那这实际上就是咱们这个脚本的全部内容,是不是非常简单看起来对吧?然后呢,现在呢,我给大家说一下,就是咱这里边做的核心的工作是什么?那首先我们做的第一件事就是啥呢?是不是就是维护了一个这样的所谓的do date变量啊,对吧?OK,这个do date其实是我刚刚所说那个日期变量,来让大家来看一看,就是咱们这个日期变量这块的逻辑是什么样的啊,来看一看能不能看懂。这是不是首先做了一个义判断对吧?If杠杆,这个杠杆指的是什么?呃,杠N指的是什么?杠NN其实指的是啥?是n zero,是n zero的一个简写啊,与杠N相对的其实还有一个杠,什么杠C对吧?杠Z是什么呢?就是杠zero,杠zero其实说白了就是啥呢?就是判断它是否是空对吧?None zero呢?
01:15
就非空呗,对不对,OK啊,也就是说如果你这是杠N,那完了之后,我后边这个值如果是非空的,那我就返回处对不对,那如果是空的,我就返回false呗,对吧,就这个逻辑啊,好,那现在我是在判断谁是否是空的呢?DOLLAR1,这个DOLLAR1指的是谁?指的是咱们这个脚本的是不是第一个参数啊,对吧?那咱这个脚本的第一个参数,我们将来会给他传个什么呢?我这是这么设计的啊,将来咱们需要给这个脚本传一个日期,传一个日期啊,OK啊,也是第一个参数就是个日期,好,那就是他这判断是啥呢?如果你传的这个日期了,OK,那do代就等于谁,等于咱传的这个日期,如果没传呢?没传是不是就是使用这样的一个命令去计算前一天的这个日期呀,对吧?OK,这个命令大家现在还记不记得。
02:03
这个在写date叉那个脚本的时候应该用过吧,对不对?Date-D减一代加百分2F对不对?这个语法大家熟悉熟悉吗?不熟悉啊,有同学可能熟悉啊,这个你要是看不懂的话,你直接怎么做一下就行了呢?诶你直接是不是help一下就完事了对吧?来在这呢,我们可以来一个date date正常情况下直接回车,是不是返回我们当前的命令啊对吧?你这用的是不是就是date命令对不对?完了之后我们看后边传的一些参数啥意思啊?那date后边你可以来一个杠杠HP对吧?那往上翻往上翻,这里边有啥东西,你看上面是不是就有我们这个date命令的用法对吧?怎么用两种用法,我们用这种啊,这是date,然后选项加格式啊对吧?选项其实指的就是option对吧?那咱们有哪些option呢?往下走有什么杠D,杠F,杠I对吧?那我们这是不是用了杠D了对吧?杠D是啥意思?Display time described by string not now什么意思?是不是展示被一个字符串描述的时间,而非当前时间对不对?OK,也就是你杠D是不是后边再给他传一个字块啊对吧?你字块描述的是哪天,那他就返回哪天,对吧?这个其实很简单,在这儿呢,你可以这样来个比如来个啥就行,咱杠D后边是不是来个字符串对吧?我们传的是啥?是减一对不对,那我也可以传啥呢?我传一个yesterday其实也可以,对吧?你看是不是就返回前一天日期了对不对,是不是就用字符串描述一个前一天的日期啊,对吧?当然你不能随便写,你写个中文昨天,那肯定不行啊,啊,这个要理解一下啊,OK,那当然这个写法不是标准的写法,标准的写法是不是应该是减一类减,减二类啊对吧,是这样减一类就是前一天日期嘛,就这个意思啊,好完之后我们继续往下走,往下走往下翻,还有什么呢?它还有一部分就是啥,是不是加那个加格式啊对吧?格式这指的是什么呢?就是我输出的这个日期的格式对吧?那格式这有这么多的格式,有什么abd等等非常多,对吧。
03:52
那咱们传的是啥?我传的是加板块F对吧?这个F指的又是啥呢?其实里边有说明呢,F是不是就等价于YMD啊对吧,是不是就是年杠月杠日对吧?诶,这就是我们想要的效果嘛,所以现在大家应该对这个命令已经比较熟悉了,对吧?是不是就是返回前年日期,并且用年杠月杠日的格式输出啊对吧?好,那外边这个标号是啥意思?
04:13
偏号是不是返回这个命令的结果,对吧?然后把结果是不是赋予前面这个变量啊,对吧?啊,就这个意思,好,那这就是这个if这一小段逻辑应该非常简单,我就不再多说了啊,接下来咱继续往下进行,那下边呢,实际上就是我们具体的这个语句了,对吧?在这我是不是先声明的一个circle字符串啊,对吧?然后注意观察circle字符串当中,我所有的这个日期,我是不是都用前面的do date给它替换了呀,对吧?那这个大家应该是能够看明白的啊好,那完事之后呢,我们继续往下走,那下边我这个30字符放在这儿,它能执行吗?它不执行,你要想执行得怎么执行have-E是不是才行啊,对吧?诶,是这样的啊,在脚本里边,我们去执行30就得have-E或have-F对吧,这样更当然更方便的是have-E对吧?完弄完之后呢,我们把这个S给他,那就完事了,对不对?这其实就是咱们这个脚本的核心逻辑,那你想一想啊,就是将来我们再去使用这个脚本的时候,咱怎么用就行了。
05:08
你说将来我怎么用这个脚本就行了,比如说我现在呢,需要去跑某一天特定的数据,比如说我现在是一个测试的环境,对吧,我就想跑某一天的数据怎么测,是不是调用这个脚本,我只需要给他传上一个你具体那一天的日期是不是就行,对吧?你传了之后,那这里边数据会替换成你具体那天日期,然后把那一天的数据给它导进来啊,对吧?那如果说将来我我需要干啥呢?我需要进行每日定时调度,就咱们都知道书仓里边任务最终要定时调度,对吧?OK,那完了之后我怎么去用这个脚本呢?调度其实说白了,将来是不是调这个脚本就行了,对不对,怎么去用它呢。掉的时候还用传参数吗?不用了,你就直接把这个脚本给他,那每天是不是就会自动的去获取前一天的这个数据了呀,对吧?诶这个脚本将来咱们这么用就完事了,诶这个其实非常简单啊,好了,那这就是咱们整个脚本的核心逻辑,在这之后呢,我再给大家稍微补充一点这个脚本里边的小细节啊呃,有一些小细节需要去注意一下,哪需要注意呢?那首先第一个就是咱们这个circle字符块,这里边的东西还是比较多的啊,大家注意观察一下,就我这个circle字符串当中啊,是不是引用了很多我们前面的变量,对吧?比如说哪呢,这个布代是不是首先就引用变量了,对不对,但是你注意观察,我在引用变量的时候,我外边是不是放了一个单引呀,对吧。
06:21
大家都知道在shell当中,单引里边的这个什么字符串,这个这个变量是不解析的,对吧,对不对,那这块会不会有问题呢。不会有问题的,那为啥?因为咱们现在啊,不是单纯的一个单引里边有变量,而是什么?我们是嵌套的引号吧,最外层是不是有双引,里边是不是有单眼对吧?然后这种情况下,那这个变量到底解析还是不解析呢?解析就是大家认准一个原则就行,什么原则对,只看最外层对吧,最外层是什么你就按谁来对吧,外层是双引,那就解析,不管它里边是什么样的啊,这个理解就行了,好,那这是一个小细节,然后还有一个是什么呢?哎,就是关于哎我们这个表名前边必须得加库名的这样一件事啊,因为你想啊,你直接执行have杠一,那这儿默认使用的库是什么库呢?Default库是default库啊,那完了,咱这个表是在这个jama库下边的,对吧?所以你这个表名前面是必须得加上一个户名的,户名当然我这声明的是一个变量啊,OK,所以说你这得加户名啊,那加户名的话,这块好像看起来有点别扭啊,咱们之前在S当中隐形变量是不是直接到链变了名就完事了,我这为什么加了一个花括号呢?
07:30
这给大家解释一下啊,那首先你加画括号跟你不加括括号都是在引用变量,那我加括号的目的是什么呢?是因为你想啊,如果我这儿没这没有这个画号,它出现一个什么样的问题呢?是不是APP跟后边的东西连起来了呀,对吧?连起来之后可能在某些情况会出什么问题呢?它会把它跟后边是不是连一起当做一个字段名啊对吧,一个一个变量名,那是不是就出问题了,对吧?啊是这样,所以这样呢,诶你加括号可以把变量名跟其他的内容隔开啊,主要是这样的一个目的啊,是这样的啊OKOK,那这个咱们稍微的理解下行了,好了,各同学,那截止到现在呢,咱这里边该说的东西基本上就哎都说完了,哎,其实不难啊,行了,脚本完成之后,CTRLCTRLC,那咱们现在呢,就把它给它创建出来,那我给它放在哪呢?就放在咱们嗨do吧,102这台节点,呃,直接退出这个客户端啊啊,那推出之后呢,我们进到它的这个加加的并路,然后呢,呃,在这里边我们需要去给他创建一个脚本,那这个脚本呢,咱们不能随便创建,我们得有相应的命名规范,那在这儿咱们这个命名规范通常是什。
08:30
怎么样的呢?就这个脚本,哎,我的命名方是这样的啊,应该是数据源突目的地啊是这样的,因为一个脚本咱们的作用是什么?是不是肯定是把一个数据从一个地方给它导到另一个地方了,对吧?所以是数据源图之啊那咱这现在这个数源是什么呀?应该就是HDFS一个路径对吧?那完了之后呢,咱们是给它放到哪呢?放到ods层了对吧?OK啊是这样,但是我们现在这个脚本不是所有的数据对吧?我们导的只有日志对吧?所以在这呢,我们再给它加上一个后缀叫做log,那就完事了,诶完之后呢,我们给它起个呃这个加,加一个点SSH,然后呢,直接呃这个呃,起个这样的名字就行了,然后前面我给他来一个VM啊呃,当是打开之后,你会发现我这个里边已经有有这个脚本了,对吧,这是我之前建的,可能没有删啊,那现在呢,我给它全部删除,然后呢,再把咱们这个新的内容给它放下来,其实是一样的啊,然后shift z好了,那这个脚本就有了,有了之后呢,我们需要给它加上一个执行权限,Hdfs to o.s log.sh好了,那现在咱们脚本已经有。
09:30
对不对,那完了之后我表我这是不是也要给它创建一下啊,对吧?来咱们给它创建出来,呃,直接回撤,好表现在也已经有了,那现在我们是不是就可以使用脚本往这张表里边导数据了,对吧?哎,我之前之所以没让大家去在这儿执行这个漏斗云是为什么呢?我就是为了想诶让这个脚本去执行这个漏操作,因为我们将来最终要调度的是什么呢?是这个脚本对吧?所以在这儿我们是必须得保证这个脚本是没问题的,对吧?诶我们在这顺便测一下脚本,呃,然后还有一点,有的可能会说了,我这儿漏的一遍,那我一会再用脚本再漏一遍不行吗?行吗?不行,这个漏的它是有特殊情况的,对吧?漏的是什么操作来着?是相当是移动文件,对吧,是剪切的一个操作对不对啊,虽然我们这么说啊,但是你在执行漏的时候,这个数据真的会移动吗?不会移动,你其实漏的时候它只是怎么做啊,就是我们看起来好像是什么呢?好像是他从这个路径是不是移到了HDFS的这个表的这个路径下呀,对吧。
10:30
但其实这个数据没有真正的动,数据在HD Fi集群最最底层是存在哪呢?是存在内蒙no的节点的,对吧?是这个道理吧,也就是我们在执行这个漏的时候,那我那个数据还是在原来的那个data not上面存着,没有动,他这在执行load操作,只是改了一下啥,改了一下name not是不是原数据到那个真实的稳健路径的一个映射关系啊,对吧,它没有真正的去移动数据,所以说load没有什么开销,没有什么性能开销啊,这个漏你可以随便执行,无所谓的啊,这个理解还行啊,好了,那这个完成之后我们继续往下进行啊,呃,完,既然漏的,那咱们提的是剪切操作,那所以说它是不能重复执行的,对吧?因为你执行一遍之后,是不是原来这个路径就没东西了呀,对吧,你再了就该报错了,就是没这个路径了,就啊这个一定要注意一下啊,行了,那接下来呢,咱们就继续往下进行吧,呃,那这块呢,我们脚本也有了,我们现在就可以执行一下这个东西啊,后来我们执行一个点杠,然后呢,加上刚才的OD hds啊HDFS到ods log点。
11:30
啊,那我们是不是得传一个日期对不对,我们现在是不是就是测试某一天的数据啊,对吧,来来一个2020杠零六杠幺四直接回车。稍微等一会啊,稍微等一会儿,这个漏的刚才说了没什么性能了,没有没有什么性能开销,所以说一一下就完成了啊OK,那已经漏完毕了,完毕之后,那接下来我们就可以干啥了,是不是就可以尝试着去查一下咱们这张表的这个数据了呀,对吧?那现在呢,我们去查看一下,那在这呢,你其实可以直接怎么做,直接是不是双击这个表就完事了,对吧?诶双击完之后,你看这个数据它是不是就已经查出来了,你双击跟你查什么是一样的,跟你查select星是一样的啊,大家注意观察,你看数据就调查出来是我们想要的一个效果了,对吧?来比如说举个例子啊,咱们以第一行数据为例,大家猜一猜,你说这条数据应该是一个启动还是页面日志啊启动啊,对吧,你看star里有值,但是什么配置什么的是没有的,对吧?诶这个应该是能想明白的啊,然后现在呢,我们再来看一下后边这个分区字段,刚才有同学对这个分区字段是不是有疑惑呀,对吧?你看现在这个分区字段,它是不是就作为了我们这张表当中的一个,相当是一个普通的字段去使用的,对吧?每就是在这个分区下边。
12:39
每一行对不对,它的DT字段的值是不是都是你这个分区字段的值啊,对吧?OK,那这个值来自于哪儿呢?并不是来自于文件,而是来自于哪,你去看一下啊,你把这个数据漏到我们那个目标表,目标是在V号这个路径下,对吧?进来,然后J贸进到ods进到它,你看是不是就会有一个DT等于2020杠零啊四这样的一个字段名啊,对吧?也就是说我们这个分区下边的所有的数据,每行它里边那个DT的值都是这个值,哎,实际样的,这就是咱们这个分区字段了,当然你这个分区字段名呢,你可以随便起叫别的也行啊,OK啊好了,各位同学,那到目前为止,那我们这个数据装载就算是完成了啊来,视频我停一下。
我来说两句