00:00
好了同学们,那咱们接下来给大家讲一个问题啊,就是咱们这个K里每日自动构建cube这个问题啊,为什么会有这么一个问题啊,大家可以思考一下啊,在公司里边咱们我我也讲过了,在公司里边一般来讲这个事实表它选用的都是分区表,而在公司里边咱们这个分区表每天都会新增分区。也就是说咱们相同的一个cube每天都需要build一下,就是每天都需要点这个action build一下,并且咱们这个cub的构建时间应该是半夜啊,就是在晚上构建这个东西。那你说我们现在总不能是吧,我们总不能去雇一个人专门在这上夜班,在这点这个吧,因此啊,这个靠人工去每天半夜这个定时build是不靠谱的。因此咱们得想办法如何实现咱们这个kidding的Q的自动构建。好吧,啊,那因此啊,接下来我给大家讲一下啊,就是咱们这个KLY是如何实现这个自动构建的,呃,构建的好吧,啊,这个时候需要用到咱们这个KLY给咱们提供的这个rest API了,为什么呀,因为咱们要写这种自动构建脚本,然后呢,把这个脚本交给这个阿兹卡班或者是乌ZZ这样的调度工具,让这些调度工具啊帮咱们执行这个脚本,从而实现咱们这个定时调度的功能,那你想写脚本实现咱们这种构建的过程,你必须得用到咱们这个king提供的这个rest API了。
01:38
那讲到这儿是吧,我们先打开这个kid官网,给大家看一下咱们这个K提供的这个rest vpi,打开K的官网,然后点这个文档啊,点咱们点这个K3版本的文档,在这个文档的这个最下边有一个rest of API,点开这个rest API。那我们讲这个rest vpi的这个之前啊,讲这个K构建,构建cube之前,先讲一个简单的讲什么呀,讲一个查询的rest vpi啊,咱们先讲一个查询的,也就什么意思啊,我通过给咱们这个kidding发送这种rest of API,那咱们就能够查询咱们这个K的数据,我们先把这个查询给大家简单演示一下,就比如说咱们点开这个carry。
02:24
在这个query里边,哎,人家明确给咱举了一个例子,就是这个CL的一个案例啊,利用这个Linux的一个命令,就CL这个命令,然后呢,向咱们一个网址,就是向这么一个网址给他发送什么呀,发送post请求。就能够得到咱们这个circle提供的,哎这么一个结果,好吧,就是就就可以就可以返回咱们这个circle的查询结果,那咱们接下来把咱们这个请求案例咱们给它复制,拿拿拿拿到外边来啊,咱们简单改一下啊,我给他讲一讲是是怎么回事,首先这个CRL这个我不说了,这个就是Linux的一个命令,然后呢,发送这个POS请求,然后杠H是什么呀?是请求头。
03:08
它有两个请求,头一个是认证的信息,另外一个就是真正的请求的信息,然后杠D是请求的内容,就咱们请求的是一个circle,然后呢,把咱们这个circle拿过来啊,最后project就是你要项,就是你要查询的项目的名字啊,最后是咱们这个链接地址,那咱们有很多地方需要改啊,首先我来说一下啊,链接需要改。Project需要改,然后circle需要改,还有什么呀,还有这个一,这个验证信息需要改,验证信息人家给了这么多X是吧,这是举例啊,就是举例,那咱们一个个改一下,先改一些比较简单的,咱们先把这个网址给它改了,把这个local host改成什么呀,改成哈杜甫102。那这个改成102之后呢,再把这个project改啥,咱们这个project是什么呀?打开咱们这个K点,咱们是不是有first project,把咱们这个first project咱们给它拿过来啊,是这个大写的first,然后呢,P是咱们的这个项目名字叫做first project。
04:15
啊,注意啊,这块不要拼错了啊,Pro GT LT啊这个没问题,然后呢,然后把咱们这个circle口改掉,那这个circle啊,就用谁啊,就用咱们king之前查的这个circle就可以,也就是说咱们文档上边啊,在使用K的时候,咱们有一个查询circle。咱们就把这个circle给到他。大家可以看到啊,这么一个circle在我麒麟里边是能够查到的。就是按照部门名称go by,求出每个部门的工资总和,那这么一个circle,诶,我就可以给您拿过来了,CTRLC,然后呢,咱们来到咱们的这个。地方,哎,咱们给它CTRLV替换一下这个circle,那把这个circle也改好了,咱们project也改好了,并且这个链接地址咱们也改好了,那现在唯独还是什么呀,还剩就是咱们这个all,就是认证,就是咱们首先大家大家明白咱们想玩这个KLY,我是不是现在登录一下我这个爱这个账号啊,那咱们现在这种POS的请求也需要登录一下,就认证一下,验证一下咱们这个爱D密账号,那咱们应该怎么验证啊?首先第一个问题,你在这个位置你不能输入你的账号密码,因为它是一个密文的,它是通过一个BASIC64位加密的。
05:33
那怎么证明这个问题呢?大家可以点开这个king官网的rest of API是吧?咱们往上翻翻哪啊,翻这么一个认证的API,在这个麒麟的官网这一块,他就告诉你,你应该怎么填写这个认证,我们打开这个认证,在这个认证里边,人家明确告诉你是吧,我的后边给的这个字符串是一个通过贝斯64位加密的一个字符串。那然后呢,我在这里加密之前呢,我前边拼的是咱们的用户名,后边拼的咱们的密码也是我这个用用户名就是大写的艾dmin ad min,然后密码就是大写的K点,那因此怎么办啊,我先把这个命令我给你复制到Linux里边,只不过咱们需要改一下,因为咱们Linux是自带Python的,利用Python这么一个命令啊,这么一个工具,咱们给它导入一下BASE64这个包,然后呢,用BASE64给咱们这个用户名和密码,给它加上一个密啊。
06:30
那那那我们只需要把这个Dollar user改成大写的ein啊,然后呢,把这个Dollar password改成大写的K啊,就咱们的密码KY Li啊,注意中间是有一个。这个冒号的啊,中间是有一个冒号风格的,那这样一来我执行一下,我得到了这么一个字符串,那这个字符串其实就是咱们这个admin跟这个kin的它的一个验证信息,那然后呢,我就把这个字符串我给它复制一下,然后把谁替换掉啊,把咱们这16X给它替换掉,替换掉以后呢,这么一个。
07:07
命令你就可以在102上边执行一下了,我用102这台机器是吧,给咱们这个网址发一个POS请求,我看我能否得到啊,我的这个结果查询结果,你会发现它的返回值是一个Jason字符串,那我们就可以复制这个Jason字符串,然后呢,给这个JA字符串,咱们做一个格式化,你格式化以后你就能得到咱们的这个circle的result,也就这个啊,这个Jason。它返回的就是咱们这条circle的返回结果,大家可以看一下,咱们的这个结果跟咱们在这个K的网页端他看到的结果应该是一样的啊,Research这个部门是10875.0 sales这个部门是九千四是吧,而康ing这个部门是8750,所以说啊,咱们这个kidding的rest of vpi是非常好用的。
08:05
那大家既然学会了这个kidding的rest of API了,那我们就来研究一下这个构建cube的rest of API,大家点开这个cube的这一栏,里边有一个build cube,那我们点开这个build的cube。在build的扣B这一栏里边是吧,它也提供了咱们这个CU的案例,就是人家会告诉你,你你如果想用这个CU这个命令来实现这个构建Q补,我需要传什么参数,那这样是吧,那我们接下来把这个咱们给它复制一下。咱们这个给他复制完之后呢,咱们就比如说我往下来几行,咱们给他复制一下,复制完以后呢,咱们依旧需要改改,咱们来探讨一下咱们这一块应该怎么改,首先第一个咱们这个。网址也需要改一下,那怎么改呢?同学们,咱们这个地方咱们得给它来下一个哈,杜甫102,咱们这个破的端口号呢,那不就是7070嘛,然后killing API cubes这个不用管,然后这一块传了个变量叫cub内,那既然你要构建cube,那但是你得把你这个cub内给到我,要不然我也不知道怎么构建,这个能理解吧,那也就是说。
09:17
也就是什么意思,也就是说咱们这个位置我得给谁啊,我得给我这个需要我构建的这么一个cube name,咱们称之为first cube,我把我这个first cube咱们摆在这儿,诶就可以了,那就可以了,那这样一来,咱们这个网址就改好了。网址改好以后呢,那再往上需要改啥呀,再上咱们首先这个验证也需要改一下,要不然咱是没法登录的,你没法登录就没办法构建Q5,所以说咱们这个验证我也需要给他改一下。改好验证信息,那然后呢,然后我们再次需要改的就是什么呀?就是这两个时间了,一个叫做start time,一个叫做end time,这两个时间它给的是什么呀?它给的是一个13位的毫秒级时间戳,大家一定要注意一下这个格式啊,人家给的是开始时间,结束时间,但是给的是两个毫秒级的时间戳,那首先第一个问题,大家先要明白这两个时间它代表的是什么时间。
10:19
那在在讲到这儿,我需要给大家演示一个东西,大家看好了啊,咱们的这个QB在构建的时候,它是不需要你填任何信息的,那这是为什么呀?这是因为咱们这个modu在创建这个实时表的时候,它是没有选这个分区字段的。如果你你的这个实时表是一个分区的实时表,那么我在这个位置,我在点构建的时候,它是会弹出一个框框,需要咱们填两个时间,一个叫开始时间,一个叫结束时间,说白了它这个开始时间跟这个结束时间就是用来过滤咱们事实表的那个数据的。
11:02
就比如说我在公司里边,基本上就是我当天是构建当天的数据,我每一天构建都是每天的数据,那因此啊,咱们这个大。跟咱们这个end time,我需要干嘛呀,我需要给的是当前日期的前一天,你就比如说咱们今天这个日期是吧,就比如说假设啊,咱们今天这个日期是这个201年10月这个,呃,六号,那我这一块给的就是什么呀,给的就是10月5号。的00:00:00到什么呀,到这个10月5号的这个23:59:59啊,咱们再给这个。或者我给一个10月6号的0.00秒,就是我是前币后开嘛,就是我要保证我今天传的是昨天的这么两个。这个时间戳就可以了,那咱们这一块怎么实现呢?就是咱们如何实现这个开始时间跟这个结束时间呢?啊,那讲到这儿,大家有必要看一下咱们文档的这个脚本,就在这儿,我给大家写这么一个脚本,这个脚本还是相当好用的,希望大家把这个脚本能够看明白,那这个脚本就能够帮助你们在就是在公司里边实现这个自动构建Q,好吧,这个脚本希望大家能够看明白,它还是非常有用的一个脚本,那我这个脚本怎么写的呀,那这样,那我们把这个脚本给他粘出来,咱们看一下好吧?哎。
12:34
把咱们这个简单的脚本咱们粘出来,粘到哪啊,粘到这个sub LA里边给大家看一看啊嗯。首先咱们这个脚本的第一行,这个我不说了啊,这是固定格式好吧,然后呢,我在这得到两个参数,一个是Dollar,一就是我我当前这个脚本的第一个参数我给谁啊?我给这个cub name,那将来我这个CU name cub内要给到哪儿啊?要给到我这个字符串的这个cub name这个地方就是我将来我的这个cube name,我是通过这个第一个参数给它传进来的。
13:04
啊,就是我的这个网址,就是我的这个HTP这个协议这一块Q内,我是通过这个脚本的第一个参数叫W1,我给他传进来的,这个大家不用管好吧,然后呢,把这个看明白以后,那咱们再往下看,看什么呢?往下看咱们这个DO2,就咱们这个脚本的第二个参数,我做了这么一个判断。如果我第二个参数传了,那我那我这个do date就等于你传的这个时间,如果你这个第二个参数你没传,那我这个do date就等于默认时间的前一天,大家可以看一下,大家可以在咱们这个。在咱们这个Linux里边执行一下这个小命令,这个命令就是当前时间的前一天啊,因为我今天是10月6号啊,所以说我10月6号的前一天就是10月5号,因此我这个do date就等于它就是等于你这个调号参数,如果你传了就你传的,如果你没传,就是当前日期的前一天。
14:06
好吧,那咱们这个do date得到以后呢,你会发现我怎么做的呀,我是用Dollar do date,就是do date这个变量的值,我又给你拼了一个零八冒号,0000,那这个给它追加八个小时什么意思啊啊,我们这个后面再说好吧,就比如说这一块,你看啊,我通过这么一个命令加了一个百分号S,通过date-D这个命令加了一个百分号S,得到我一个时间字符串的什么呀,秒级时间车。也就什么意思啊,大家看一下啊,你就比如说我的这个do date啊,假设啊,咱们这个do date就等于我的这个2020-0015,那也就是说咱们这个命令就变成什么呢?给大家给大家看一下啊,复制然后粘贴咱们这个命令就变成了咱们这个20202021杠幺零杠零五是吧,这么一个命令能得到咱们这个时间字符串的一个秒级时间串。
15:01
是一个十位的秒级时间戳,那这个秒级时间车,你可以咱们给它这个格式化一下,你会发现咱们这个秒级时间戳就等于咱们这个时间字符串,就是10月5号的早上八点。那有同学看到这儿他不懂啊,他说老师啊,我这我感觉这个地方应该给零点啊,你为什么要给一个八点呢?为什么要给他往后给他延长八个小时呢?啊大家看一下我这个文档,我给大家解释了,这是因为什么呀,我们的我们没有修改服务区的时区,因此这个K内部它只识别零时区的时间,而我零时区的零点就是我们我们北京时间东八区的早上八点,因此我们在脚本里边写上一个八点来弥补这个时差庄时差的问题,这个问题是我自己测做做这个测试测试出来的,如果在这个地方你补的是零点,你会发现咱们这个时间。永远要比咱们那个整天晚上八小时。
16:00
啊,所以说我在这儿我给他补了一个八八个小时来弥补这个时差问题,这个大家知道就好了,那我们一旦得到这个开始时间的秒级时间戳以后,我怎么办?我会把这个秒级时间戳给你乘1000转成一个毫秒级时间戳,那这个我们就是开始时间的毫秒时间戳就有了,也就是说这个started将来。哎,要传到这个star time里边啊,这是一个毫美时间串,那这是我的开时间,那我的结束时间怎么?哎,我用我的开始时间。加上24小时的毫秒值啊,就比如说我们一天是24个小时,24小时乘以60是是一天的分钟数,再乘以60是几天的秒数,然后再乘以1000,就等于这么一个数字,相当于这个数字是我一天的毫秒数,那然后呢,我用我开始时间的毫秒时间戳加上一天的毫秒数,就等于我结束时间的。
17:01
这个毫秒时间串,因此啊,我这个start date,哎跟这个end date是吧,这个start date跟这个stop date,哎就给到了这个start time跟这个end time里边,那我们一旦把这个所有的变量都给它抄完了,那咱们这个脚本就给他讲完了啊这个脚本功能还是比较强大的,我希望大家好好琢磨一下,好吧,那接下来咱把这个脚本咱们写一下,哎,咱们就比如说。我我我把这个脚本啊,CTRLC,咱们来到咱们这个102的加目录的并目录下。哎,然后呢,我vim,咱们给它写上一个什么呀,那么写上一个kding,然后下划线QB啊,下划线build的build ld.sh然后咱们点一个I,把咱们这个脚本你复制过来,然后呢,咱们WQ保存,保存完以后给我这个脚本加上一个执行权限,趁着mod加Xk.QB build.ch那一旦咱们这个脚本有了,那我就可以测试一下咱们这个脚本它好不好用。咱们这个脚本的第一个参数,它切记传的是cube的名字,而咱们当前的cube叫什么名字啊,咱们当前的cube叫first cube,因此我把这个first cube我往这一传,然后第二个参数传的是时间,就咱们当前要构建哪一天的cube。
18:18
那又因为咱们当前这个Q5是吧,在做的时候我们没有用那个分区表,所以说这个时间我传不传都无所谓,但是大家记住啊,在公司里边这个是需要传的,如果你不传,它默认取的就是你当前日期的前一天,那这一块我就不传了,那咱们就是吧,就是以当前日期的前一天来构建一下咱们这个first q5,看它是否能构建成功,在我执行这个命令之前,我当前是没有正在构建的Q5的,给大家证明一下,在我这个monitor里边是吧,我没有挣钱运行的状,然后呢,我执行我这个脚本。执行以后你会发现咱们这个模你刷新。啊,它就多了一个正在执行的作误,那就说明同学们,咱们的这个脚本它生效了,咱们这个脚本经过测试是可以用的,同学们,那只要这个脚本能用了,大家也都知道是吧,你把这个脚本交给这个阿兹卡班,或者交给这个乌贼,咱们在半夜晚上咱们做这么一个定时调度就可以了,我们用这个脚本就实现了咱们这个king的每日,就是每日晚上的自动构建这个Q5。
19:32
啊,好吧,那这个自动构建客我就给大家讲这么多,这个脚本还是那句话,希望大家你可以收藏一下啊,这个我相信在公司里边对使用这个K的小伙伴一定是有用的,好吧啊。
我来说两句