00:00
好,那现在我们来看一下这个数据同步脚本到底是怎么写的啊,大家注意观察啊,咱这儿呢,一共有两个同步脚本,一个叫做首日同步脚本,一个叫做日同步脚本,对吧?啊,那首日同步脚本里边是什么内容呢?其实是每张表的首日全量同步的命令。啊,那每日同步脚本呢。那这个脚本里边的内容呢,其实就是每张表的每日同步的命令了,对吧?啊那当然这个每日同步的命令呢,可能是每日增量同步,也可能是每日全量同步,也可能是每日新增级变化同步,然后还有一点大家需要注意一下啊,就是首日同步脚本,我们只需要在第一天执行一次,对吧?那每日同步脚本呢?诶,是需要在后续每天重复执行的。好,那现在我们来看一下这两个脚本的具体内容啊来,我已经提前把这两个脚本放到subm里边了啊,那现在咱们来看一下啊,先看第一个首日同步脚本,好,我们先看这啊,那这儿其实就是声明了两个变量对吧?来我们先看第一个啊,第一个是APP等于j ma,实际上这个j ma指的是啥?
01:05
哎,其实就是my circle当中的业务数据库的库名啊好,那我们再来看第二个,第二个是啥是对吧?那op后边的值是啥?是不是OPT mole scoop b scoop,这个是不是就是scoop命令的绝对路径啊,没错吧?啊好,我们继续往下看啊,那下边这一段是不是做了一个判断呀,对吧?我们来看一下它的判断逻辑是啥?好,那if,杠n dollar2,这个Dollar二指的是啥?DOLLAR2是不是指的是这个脚本的第二一个参数啊,对吧?那这个杠N是做什么判断,是不是做非空判断?没错吧,那如果DOLLAR2它为空啊,那在这儿呢,我们会返回false,那如果非空哎,则会返回处,这个一定要注意啊,也就是他判断的实际上就是我们有没有传第二一个参数,对吧?啊,如果我们传了第二一个参数了啊,那OK,是不是就把第二一个参数的值赋予了do date呀,对吧?那如果我们没传呢?没传是不是就直接退出了对吧,也就是在这儿啊,我们是必须得传入第二个参数的啊,那这个第二个参数的内容应该是啥呀?诶就是一个日期,那这个日期应该传哪一天呀。
02:11
是不是应该传我们同步数据的第一天的日期啊,对吧?这个大家一定要注意一下啊,好,那我们继续往下看啊,那下边呢,就是我们刚刚提到的那个公用的函数对吧?哎,叫做import data啊,那这个函数的主要内容实际上就是一个scoop的importt命令,没错吧?啊,来我们看一下啊,首先在这儿调用scoop,然后后边呢,传了一个参数inport的对吧?然后后边呢,就是我们大家所熟悉的那一大堆参数了,来我们主要看一下啊,先看这三个。诶,这是不是就杠杠connect后边呢,是C的URL,那username用户名的密码对吧?那当然呢,大家在这块呢,也要根据自己的实际情况做出相应的修改啊好,我们继续往下走啊,那下一个呢,是target DR啊那这是不是就是咱的目标路径啊对吧?来我们看一下这个数据最终会被上传到哪个路径啊,是不是就是origin data完这儿呢,是不是引用了上边的APP变量对吧?也就是谁是不是也就是j ma啊对吧,也就是origin这个路径下边的j ma啊,这个路径下边的DB,而后边呢,还有一个是谁是DOLLAR1。
03:16
啊,大家要注意啊,这个DOLLAR1指的是啥?这个DOLLAR1呢,实际上指的是这个函数的第一个参数啊,大家一定要注意啊,这个并不是整个脚本的第一个参数,是这个函数的第一个参数,它是有作用欲的,这块一定要注意啊,也就是咱这个目标路径呢,它不是固定的对吧?啊,那这个数据具体会被上传到哪个路径,是不是由我们调用这个函数的时候所传入的参数决定的呀,对吧?这个要注意,然后再往后,再往后呢,是Dollar do date对吧?那这个是就是我们调用这个脚本的时候所的啊好,那这就是我们的目标路径啊,然后我们再往下看啊,下一个呢,是delete target,那这个参数的作用大家还记得吧?啊,是不是咱们声明这个参数之后呢,那我们这个死库吧,在导数据之前会先去检查一下目标路径是否存在,如果存在呢,它会先删除啊好,我们继续往下看,诶下边一个呢,是杠杠query对吧?这个query后边应该是啥?诶是不是就应该是咱们那个circle语句啊,对吧?那当然呢,这个circle语句它也不能是固定的对吧?哎,因为不同的表它的circlel语是不是应该是不一样的呀,对吧?所以在这呢,我们也是一个参数啊,这个参数DOLLAR22当然指的就是啥,是不是这个函数的第二一个参数啊。
04:27
没错吧,也就是一会儿呢,我们在调用这个函数的时候呢,需要传两个参数啊,那第一个参数呢,跟咱们的目标路径是相关的,对吧?那第二一个参数呢,诶,是不是跟咱们这个circle课的查询语句是有关的呀?好,那我们继续往下看啊,下一个呢,是number maps map的个数啊,然后在这儿呢,我们将map的个数设为一了啊,然后有一点大家要注意一下啊,如果我们将map的个数设为一,那设为一之后是不是就没有切片了,是不是就只有一个切片,那只有一个切片的话呢,我们就不需要传入lit by那个参数了,大家注意观察,我们这儿是不是就没有Li by这个参数了。
05:03
啊,这个要注意一下啊,好,我们再继续往下看啊,下一个呢,是fields terminated,这个大家应该比较熟悉,是不是就是最终的文件当中每个字段的分割符啊,对吧?在这儿呢,我们给它指明为杠T了啊OK,我们继续往下看啊,那下边这两个参数呢,大家之前应该是没有见过的诶,但是一看参数名我们就能知道它是什么作用对吧?啥作用啊,是不是就是压缩呀,对吧?诶,杠杠,Comp,那这个呢,意思就是表明,哎,我这个输出的文件要进行压缩啊,那我压缩的格式是啥呢?诶,下边一个参数就告诉我们了,Compression Co DEC,对吧?Co DEC呢,指的就是compress以及。com就是压缩和解压缩对吧?那在这儿呢,其实就是指明一个压缩格式啊,那咱这用的是什么格式啊,是拉泽罗P对吧?跟我们之前上传日志文件所使用的压缩格式是一样的对吧?那我们继续往下看啊,那下边只剩下两个参数了,对吧?啊,这两个参数呢,都是与no值相关的。啊,那它俩的作用是啥呢?其实就是声明买serve当中的值上传到HDS上之后要以什么形式保存,那默认情况下呢,那此库op诶会将my circle当中的now值保存为小写的now的字符串,那在这儿呢,我们使用这两个参数声明一下啊诶我们需要将now值保存为反斜杠大N,那我们为什么要将这个now值保存为反斜杠大N呢?哎,这个需要给大家解释一下啊,那首先啊,我们上传到H个件啊,后期入到啊那中么呀,实际当中值的就是反斜杠大N,那我们为了保证这个now值能够被害物正确的识别啊,那所以在这儿呢,我们需要将now值保存为反斜杠大N啊然后呢,在这呢,我们写的是双反斜杠对吧?这个双反斜杠是干啥的呀?诶,主要是为了转移,哎,这个呢,大家需要去注意一下,好,那这就是最后两个参数的作用,OK啊那这个SCO。
06:59
Port它的命令就完事儿了,对吧?啊,那它完事之后下边是不是还有一条命令啊,对吧?那我们来看下这条命令是在干啥啊?来我们看一下是啥,首先hi杜op这儿对吧?然后呢,指向了hiop拉这个包没错吧,然后面呢,指向了一个呃拉罗index的类名,然后再往后呢,是不是指向了一个路径啊对吧?这个路径是哪个路径?
07:21
这个路径是不是就是我们上传数据的路径啊,对吧,和这个target d呢是一样的啊。那这条命令到底在干啥呀?是不是就在为我们上传的拉泽罗文件创建索引呀,对吧?大家都知道啊,拉泽罗文件呢,要想支持切片是必须得建立索引的,没错吧?那所以这条语句呢,实际上就是在创建索引啊,那所以说我们总结一下啊,就这个inmport date这个函数呢,实际上一共完成的两个工作,第一个工作呢,是把目标表的数据上传到HDS的目标路径,对吧?啊,那第二一个工作呢,哎,就是对上传上来的这个拉泽罗文件呢?诶,创建索引,OK,那这个inport data函数就完事了啊,待会之后我们继续往下看啊,大家注意观察,那下边它是不是又为每一个表都声明了一个函数啊,对吧?比如说这个哎,Import in,然后再下呢,哎,会有一个import coon use,然后再往下呢,哎,Import slog啊,那它的每个函数的作用又是什么呀?啊,其实很简单啊,它每个函数的作用呢,就是去同步与之对应的这张表的数据,比如说import。
08:27
的older ino这个函数啊,那它的作用呢,就是去同步older in这张表的数据啊好,那现在我们来看一下这个函数的具体内容啊,那首先它这是不是调用了import date这个公用的函数啊,对吧?然后后边呢,给他传来两个参数啊,我们先看第一个啊,第一个参数是不是order in其实就是啥,是不是就是表明啊对吧?啊,那第一个参数它是不是会被解析到我们这个目标路径里边啊,对吧?啊,那也就是older info这张表的数据呢,最终会被上传到origin date j ma DB date这个径下对吧?好,那我们再来看一下第二一个参数,第二个参数呢,实际上就是那个语句,那我们简单看一下啊,那在这呢,是不是就是select各个字段对吧?然后呢,From order in for很简单,对吧?啊,但是呢,这个它并不是最终的S语句啊,那最终的SL语句应该什么样的呀?来我们往上翻啊,最终的搜狗语句呢,应该是DOLLAR2和后边的这个外二子句拼接而成的,这个呢,大家一定要注意一下啊,那这个外二沟理条件呢,我们。
09:27
简单看一下啊,在这儿呢,我们没有自己的过滤条件对吧?是不是只有一个Dollar conditions啊,那为啥我们没有自己的过滤条件呀?诶,因为咱这个脚本是不是首日同步脚本对不对?那首日同步脚本是不是每张表都是全量同步,那所以说我们这儿是不不需要去过滤数据啊啊,这个也要理解一下啊好,那下边的每个函数啊,都是相同的写法,我们就不再一个一个看了啊OK,那现在我们来思考一个问题啊,就是我们在这儿啊声明了这么多的函数对吧?啊,那一会儿我们去执行这个脚本的时候,你说这些函数会被执行吗?
10:00
啊吧,显然你光声明它是不会执行的,对吧,你是不是得调用这些函数它才会执行啊,对吧,那咱们这些函数是怎么被调用的呢?来我们往下看啊来把这个脚本拉到最底下。好,到这个位置啊,大家注意观察啊,在这儿是不是咱们用了一个K啊,对吧?啊,Case判断的是谁?判断的是不是DOLLAR1,注意啊,这个DOLLAR1是谁?这个DOLLAR1实际的是我们个脚个数吧,然后我们一下的辑,那如果那是不就调用iport order这个函数,那如果第一个参数是base category1,那他就会去调用IM base category1啊。那也就是说我们传的第一个参数是哪张表的表明它就会去调用哪张表的函数,对吧,进而同步哪张表的数据,是这个道理吧?啊好,我们再继续往下看啊来往下走,那如果说我们传的第一个参数是奥。OK,那你看它干啥了?它是不是调用了每张表对应的函数啊,对吧?那也就是说如果我们传的是奥啊,那它就会同步每一张表的数据,OK啊,那这就是我们第一个脚本的全部内容,那最终呢?诶我再总结一下这个脚本的用法啊,那这个脚本我们在使用的时候呢,一共需要传入两个参数对吧?那第一个参数呢,可以是一个表或者是一个对吧?那如果我们传的是一个表,那它是不是就会去同步这张表的数据对吧?那如果我们传的是呢?诶,它就会去同步全部表的数据啊,那第二一个参数是啥呀?诶第二一个参数呢,是一个日期,那这个日期我们应该传哪天的日期啊?是不是应该传我们同步数据的第一天的日期?
11:40
对吧?诶,那这就是这个脚本的用法啊,这块呢,大家要稍微记一下啊好,那接下来我们看第二一个脚本啊,每日同步脚本啊,其实这两个脚本的结构啊很像啊,那所以这个脚本呢,我们快速的过一下就行了啊那首先我们先看这儿啊,这是不是还是定义了两个变量啊对吧?一个APP一个库,那这两个变量呢,和第一个脚本是一样的啊,所以在这儿呢,就不再解释了啊好,我们继续往下看啊,看这儿,那这儿是不是也是一个if判断呀?啊但是啊,它的逻辑和第一个脚本就有所不同了啊来我们看一下啊,那首先在这儿它还是先判断了一下第二个参数是否为空对吧?那如果不为空啊,是不是就将DOLLAR2的值赋予do变量对吧?那如果为空呢?诶,如果为空,它就使用date-D减1DAY这个命令去计算前一天的日期,对吧,然后呢,将前一天的日期赋予do date变量,那实际上啊,这个每日同步脚本啊,那他在每天执行的时候呢,是不是就应该自己去计算前一天的日期啊,那咱这。
12:40
那这么写啊,主要是为了方便测试啊,那比如说我现在想测试同步一下特定一天的数据啊,那我们是不是就可以给这个脚本传上一个特定的日期啊,对吧?那这块呢,大家要理解一下啊好,那我们继续往下看啊,那下边呢,仍然是inport date这个公用的函数对吧?那这个函数呢,和第一个脚本是一样的啊,那同样是由两部分组成啊,那一部分呢,是这个scoop的同步命令对吧?那还有一部分呢,诶,就是为拉泽罗文件创建索引的命令,好,那我们再往下看啊,那下边呢,仍然是每个表哎,一个函数啊,那函数的内容呢,仍然是调用引port date的函数啊,然后呢,再传入两个参数啊,一个是表明,一个呢是circle语句,然后呢,我们需要重点去看一下啊,这个circle语当中的过滤条件啊,那为什么我们要看这个过条件啊,那由于这个脚本它是每日同步脚本对吧?啊,那所以说我们不同的它的同步策略是不是就可能不同啊对吧?那咱的同步策略是不是主。
13:40
体现在这个circle语句的V过滤条件上啊,那所以说我们这儿呢,需要重点看一下啊好,那我们就先看一下这张表啊,这张表是不是就是older啊,对吧?按照我们之前的规划啊,Order它采用的每日同步策略应该是啥?应该是新增变化对吧?啊好,那我们来看一下它的V怎么写的,是不就是data for time等于Dollar do date对吧?然后或者啊,Op time等于Dollar do date,那这样一来我们是不是就能拿到Dollar do date这一天的新增及变化的数据了呀?好,那我们再来看一个增量同步的啊,那哪张表采用的增量同步啊?诶,Carbon in是不是采用的是增量同步?没错吧,那现在我们搜索一下啊,Com men,好,大家来看一下啊,那comment info这张表的词后语句是怎么写的?
14:27
是不是就是where,诶,Data format create time等于Dollar do date呀,对吧?那这样一来咱是不是就能够拿到Dollar do date这一天的新增数据了?好,那最后我们再来看一个全量同步的啊,哪张表采用的是全量同步啊,诶商品表是不是采用的是全量同步对吧?所以说我们在这搜一下啊,诶,CTRLF,然后呢,我们搜索SKU对吧?好,那这张表就是哎,全量同步诶那我们看一下它的过滤条件是怎么写的,那大家注意观察啊,那这是不是有一个V1等于一啊对吧?诶,那理论上啊,全量同步的表,它的过滤条件其实是可以不写的对吧?啊,那咱这儿为什么非要给它写一个V1等于一呢?啊啊,其实这个呢,我们去看一下inport date这个函数大家就明白了啊来,我们回到上面去看一下啊,大家注意观察这个位置,杠杠query啊大家来看啊,我们最终执行的S语句实际上是谁?是不是DOLLAR2AND Dollar conditions啊对吧?那在这儿呢?诶,我们为了满足circle的语法要求啊,就是不管我们有没有自己的过滤条件,咱这是不是都得来一个where对吧?啊,然后因为这儿有一个and,所以我们前面必须得有一个过滤条件对吧?那所以说我们就写了一个WHERE1等于一啊,然后and Dollar conditions,其实主要是为了满足这个circle的语法要求啊,在这块呢,大家理解一下就行了,好,那接下来我们继续往下看啊,来我们来到最底一下。
15:47
那最底下呢,仍然是一个case判断,那它判断了呢,仍然是这个脚本的第一个参数啊,这第一个参数呢,诶我们还是可以传一个表名,也可以传一个O啊,那如果我们传的是一个表名,那它就同步这张表的数据啊,那如果我们传的是奥呢?诶,那它就会同步所有表的数据,这个呢和第一个脚本是一样的,那最后呢,我再来总结一下这个脚本的用法啊,那实际上我这个脚本呢,它一共有两个参数对吧?诶,但是第一个参数呢,是必传的啊,第二个参数其实可选的,比如我们可传可不传,那第一个参数呢?诶,我们可以传一个表名啊,也可以传一个奥,对吧?如果我们传的是一个表啊,那它就会同步这一张表的数据,如果我们传的是奥呢?诶,它就会同步所有表的数据啊,那第二个参数呢,诶我们如果要传,诶我们需要给他传的是啥?是不是就是一个日期啊对吧,你想同步哪天的数据,那你就传哪天的日期就可以了,好,那第二一个脚本咱们也就讲完了,OK,那接下来呢,我们把这两个脚本给它创建出来啊来我们先创建第一个啊,就是首日同步脚本,对吧。
16:48
来ctrl a ctrl c给它复制一下,OK,那在哪创建呢?诶,就在艾特Google用户的加目录就可以啊,我们进到加录的B目录下边啊来咱们就还在这儿创建啊,那第一个脚本咱给它起个名字啊,叫什么名啊,来咱们叫做my circle,然后呢,To hdfs,来加上一个已这样一个后缀,表示它是一个首日状态脚本,然后回车啊,那然后呢,我们按一下I啊,然后把我们刚才复制的内容呢给它粘贴进来啊好,第一个脚本就创建出来了,然后shift zz啊好,我们再来创建第二一个脚本啊,第二个脚本就是每日同步脚本对吧?那第二个脚本叫什么名呢?咱们就把第一个脚本的隐匿去掉就可以了啊,那咱们就叫做my circlel to hdfs.sh啊,然后回车啊,按一下I,然后呢,我们去拿一下它的内容啊,来ctrl a ctrl c。
17:35
好,那现在我们给它粘贴进来,OK,那第二一个脚本呢,也就创建出来了啊好,那接下来呢,我们需要给这两个脚本加上执行权限啊,来我们执行称职帽的加X,然后呢,My circle to HT FS,我们来一个星进行通配就可以了,然后回车啊LL查看一下,好那这两个脚本是不是就都有执行权限了?好,那现在假定今天就是我们同步数据的第一天啊,而且今天的日期呢,就是2020年6月14号啊,那现在我们是不是就可以用这个首日同步脚本去把我们my circleql当中的业务数据同步到HDFS上来呀,好,那现在我们就去执行一下这个脚本,去同步一下咱们这个业务数据啊好,那现在点杠啊,直接调用my circlel to hfs对吧,然后呢,加上一个以啊,然后后边我们是不是需要传三呀,对吧,在这呢,我们需要把所有的表都同步过去啊,那所以说第一个参数咱是不是应该传哦,对吧,那日期呢,日期是不是应该传2020年的6月14号对吧,那现在我们回车。
18:32
OK啊,那这个任务呢,就已经开始执行了啊,那这个脚本执行的时间可能会比较长啊,所以我现在呢,先把视频停一下,等一会儿执行完我们再来查看结果。好,那这个任务呢,已经执行完成了啊,那现在我们去H咱啊,然后呢,我们先来到它的根目录啊。来走,然后呢,找到origin date对吧?然后找到J,找到DB,然后呢,大家来看一下这里边是不是就是我们同步的每张表的这个路径啊,对吧?那现在呢,我们随便抽查一个,比如说我们点击older info,那完意里边是不是就出现了6月14号这个路径,那然后我们再往里边点啊,点完之后大家注意观察,这是不是又有两个文件啊对吧?一个是咱们上传的拉泽罗这个数据文件对吧?然后还有一个与之对应的索引文件,没错吧?啊,那这就说明我们刚刚所执行的这个首日同步脚本是没有问题的啊,那咱是不是还有一个每日同步脚本啊对吧?这个每日同步脚本呢,我们暂时呢还用不到啊,那这个呢,在我们这个项目进行到后边的时候呢,才会用到啊,那所以说暂时我们就先不用管它了啊,那也是现在我们业务数据的采集就已经结束了,对吧。
我来说两句