00:00
好,各位同学,那买分当中的库和表咱们都建完了,那接下来呢,我们要做的就是去编写这个S库op的导出脚本,对不对啊,其实这个脚本呢,相对来说也比较简单,在这儿我们就不在一行要去编写了,我们一起看一下就可以了啊来,我们先把这个脚本内容全部粘出来,CTRLC来我放到这个Li当中,咱们一起看一下啊,再看RV,好,我们从头开始看啊,那首先大家看这个位置啊,这有什么?这是不是有一个这个什么两个变量嘛,对吧,一个是have DB name,一个是have,一个是my circle DB name,对吧?一个J,一个j report是不是就是咱们这两个库的名字对吧?这个不用说明啊,那然后大家要注意观察一下啊,你会发现这个脚本咱们没有那个什么do date的日期了是不是?为什么他没有do的日期啊?为啥呀?啊,为啥没有,咱们得搞清楚啊,都店的日期咱们之前是干什么用的,是不是为了获取前一天的日期,没错吧?啊,那因为我们去导数据的时候,每天是不是只通过前一天的数据啊,对吧?啊那为什么这个脚本没有?
01:00
这个脚本其实我我我也想让他有,我也想让他有,对吧,我我也想让他每天指导这个新增的这部分数据,对不对,但是咱们给他放一个do的有用吗?没用,为啥?因为库不管你怎么导,每天导是不是都是全面对不对,所以说你放那个呃那个什么那个do date不是也没有意义,对吧?它也不可能根据你那个do date去过滤相应的数据啊,对吧?所以说没用啊,那就在这呢,就没有那个变量了啊,那接下来我们继续往下走,下边是不是在这儿声明了一个函数啊,对吧,这个函数叫做export date函数对不对?OK,那这个export date当中呢,其实就封装了一个SCO呢,导出任务啊,我们来看一下这个这个scoop这个命令到底怎么写的啊,大家还记得school的使用方式吧?School用的时候是不是就是调用school的脚本,完了后边再给它传一个,比如说咱们之前传的是什么?是port对吧?是导入,那现在我们说要导出,导出之后是不是这后边传入相应的参数就可以了,没错吧,那接下来我们看一下这里边具体参数啊好,先看前三个。这三个参数大家应该不陌生吧,是不是就是connect connect其实就是咱那个JC的U2L对不对?这里边的JBC1023306,大家呢,需要根据自己的实际情况去改一下这个主机名和端口号,那后边是不是引用了一个变量my circle DB name是不是就JA report呀,对吧?啊,那完之后往下走,下面是不是有一个use UNO等于true,然后sideco等于uty,因为咱们是不是有中文呀,对吧?这个要注意一下啊,好,接着往下走下就是username password,这个也要根据大家自己的实际情况进行相应的修改啊,我这不用改,没问题,现在往下走,下边一个参数啥是不是table,这个table是不是肯定是指明一个表明对不对?那大家说这个表明应该是哪的表,是my serve的表明还是have的表?
02:47
好好想到这事。肯定是买circle,为什么肯定是买circle啊,我们前面说了,咱们school导出的时候,他是不认have表的,对不对,他认他只认什么,他是只认HDL的文健呀,对吧?那所以说你这放一个表名,它它它它能识别是have的吗?不可能啊,那他这肯定是谁,肯定是买S当中的表名,也就是说这表名声明的就是我要把数据导到my circle这个库下面的哪个表里啊,就这个意思啊,现在我们继续往下走,下面这是不是还有一个参数杠杠numbers啊ma杠杠这个number maps对吧?什么意思是不就是Mac的个数对不对?那由于我们现在ADS层的数据量,包括以后大家工作的时候也是一样,As层这个统计结果的数据量会很大,是不是不会很大呀,对吧?所以通常情况我这个map的个数呢,不会设太大,再让我们设成一就行了啊,那这个如果我不设这个一,它默认值是几啊,是四啊是四个同学记着还挺好,还记着呢啊来继续往下走,那下边这个三分之啥。
03:47
看一下是不是export DR export DR是不是就是什么,是不是导出路径呢?对吧,大家看一下这个路径是哪,这个是不是就是我们house啊这个have DB name,这时候是那个j Mo对吧?那这是什么,是ADS这个呢,都是一,那实际上这个路径其实就是啥。
04:07
我们as路径,呃,ADS层那个在HDFM的路径啊,是这样的啊,然后大家要注意观察一下,那这个最终这块应该是什么。这个位置应该是啥。这个德一应该是一个表的具体的表名对不对啊,但这个DO1应该是啥,是不是也是一个表名,但是你要你要搞清楚啊,这块的这个表名是谁的表名,是have的表名对不对,那这个呢是买serve的表明对不对,那你要这么写的话,那是不是也得保证买so的表名跟have的表名得是一样的,对吧?诶那这个其实没有一个必必然的要求啊,就是说我这我买so跟have不一定非得一样,我可不可以不一样是可以的,那如果你买so的表名跟have的不一样,那这个脚本是不是得改一下,这不怎么改。
05:00
对,你传俩参数就可以了,对不对,比如说第一个是MYSQL的表面,第二个是have的表面,能理解吧,啊,这个搞清楚就行了啊啊,那继续往下进行,那再往下呢,看这两个参数。啊,先看这一个啊,先看这一个,这个简单吧,是不是就指明一个分隔符对不对,那这个分隔符我们应该指明为什么。我这儿是不是一定得写题,我写别的行不行?啊,这个得跟谁保持一致?对,得跟ADS层的have的表的分隔符保持一致吧,是这个道理吧,OK,那咱们去看一下咱们have的ADS层的表是以什么作为分隔符的,是意样,是不是就是杠T对不对,它那是杠T,那所以我们这个脚本当中,这个参数的值是不是就得杠T,这个理解一下啊好,我们再往下走,再往下走呢,还有两组参数啊,两组啊,这是两组啊,完了之后呢?呃,我们先看下面这组吧,下面这组相对简单一点啊看先看这组,这组是什么,是不是input no string input no net string啊对吧?哎,大家应还能想起来这个参数的作用是啥了,是不是因为处理no值对不对,我们之前在写库导入脚本的时候,咱们说当时考虑一个问题啊,什么问题,就是买serve,当中not值导到have之后,我应该存为什么,对不对?那其实它默认情况下是存于什么呀?
06:14
默认情况下,你买三的nu值导到have之后会存成小写的这个no的字符串啊,是这样的啊,它存成no的字符串会导致一个什么样的问题,会会导致我们have当中啊所有跟not相关的语法都失效,比如说is not is not not,那是不是就失效了,对吧?是这样的啊,那所以说我们呃,是不是得做一个转换对不对?那hall当中它nu值本身应该存储,为什么?是不是反斜杆大N呀,对吧?所以我们当时就需要告诉S库法满三的now值你打到have之后呢?诶,你需要转成反向大值啊,这是之前那个参数的作用,那现在咱们这个参数作用应该是啥呀?反过来呗,对吧?哎,如果我have当中有反向纳,那你到了买serve里边得存成闹值才可以,能能理解吧,啊,是这样的啊好,那这之所以要写两个反向二是为了什么,是为了转一啊对吧,这个理解就行了啊好,那接下来我们再看最后一组参数,就他们俩这两个参数呢,其实就是为了解决什么问题。
07:11
就是为了解决我们那个数据的重复导入的问题啊,是这样的啊,然后这两层数分别是啊,看一下update mode以及update k啊,什么叫update mode update mode是不是就是一个呃,更新的模式啊对吧?那这个update k呢,K是不是就指明一个字段呀,对吧?或者是多个字段,哎,是这个作用,那这俩参数到底啥意思,给大家解释一下啊,那实际上啊,我们在使用SCO在做这个任务的,在做这个数据的导出的时候呢,那S库一共有两种导出模式,两种导出模式啊,一种导出模式呢就是insert,一种导出模式呢,是update啊是这样的啊,那所谓的insert这种导出模式就是啥意思啊,它会把你需要导出的数据,把一条一条数据呢,都翻译成一个一个的什么语句。
08:01
Insert语句能理解吧?啊,那如果说哎,你要是update的模式呢,那它会把每条这个数据翻译成一个什么样的语句,就是update语句能理解吧,是这样的啊,那如果说我们此处不写这样的两个参数,那它默认的这个导出模式是哪种啊?就是in的,就是默认情况下来是用in的,是in的,但是IN4这种模式会出现什么样问题,咱们这能不能in的模式。能不能用exce模式,那显然是不能的,因为我每天往外打出导都是全表,是不是全表,那全表啊,那我这个呃买so当中,比如说有一张表啊,那我如果说买so这张表,咱们如果说没有主见,如果没有主见的话啊,那我每天往里边引三呢,这会出现什么问题,数据肯定能写进去,但是会有重复,对不对,那如果说你设置主键了呢。然后你还每天往里边iner图会怎么样,是不是会报错呀,对吧?啊这个大家一定要理解一下啊,OK,那所以我们这无论如何是不能使用inser对不对,那所以说我们得用哪种是用update模式啊,对吧?啊这个update这种模式呢,又分为两种小模式啊,哪两种小模式呢?啊,一个就是我们在这看到的insert,那还有一个呢,就是update。
09:16
啊,是这样的啊,一个叫做allow,一个叫update,恩,那默认情况下是谁呢?呃,应该是那个update only啊,那如果说我们使用update only,那它会实现什么样的效果呢?对,新数据是进不去的,他只会改这张表当中原来的数据,新数据是不会往里边写的,那你说我们能用这种方式吗?我们是不能的,对吧?哎,我们应该用哪种,是不应该用这种所谓的alone inert,那allow iner它能够实现的效果是什么样的呢?啊,My serve当中的数据如果存在,存在我就怎么样。存在,我就用我今天新导过来的数据,对它进行相应的修改操作,对不对,那虽然咱们叫做修改啊,但是针对于我们现在这个ADS层的场景来说,我你说我们修改之后这个数据它会变吗。
10:02
会变吗?是不会变的对吧?啊是这样的啊,那所以这个大家理解一下啊,那新数存在的数据修改,那不存在的数据呢?诶是不是就给他插入进去啊对不对,那这个是不是才是我们想要的效果呀,是这样的啊OK,那所以在这呢,我们需要指明一个update mode等于alone insert啊,那只要我们把这个参数给它加上了,那我们死库使用的导出模式就不是insert,就是啊update了啊实际上给大家理解一下啊,那如果说我们不加这个update mode不加K,那它用的是哪种模式啊,是不是就iner的模式啊,对吧?这个理解一下啊好了,那完了之后我们再往下走,那下面是不是还有一个参数叫做after k啊对吧?这个after k的作用又是什么呢?啊,对K的作用是什么?啊,那刚才咱提到了,我们说他去修往里边就是使用这种update的模式啊,往里边写数据的时候,他是怎么做的,是存在的修改,不存在的插入,对不对,那存在不存在它怎么去判断呢?是不是得根据一个字段去判断对不对,那根据谁,是不是得根据一个主键或者是为一键去判断呀,对吧,能理解吧,因为主键或者是唯一键是不是能够唯一表示这一行数据对不对,只要诶我今天的数据跟这张表当中原来的数据的主键或者是唯一键相同,我就表明这两条数据是不是相同的呀,是同一条数据对不对,那我就用今天的给它把原来的给它覆盖掉啊,是这样的啊OK,那所以说此处我们要写的应该就是啥,是不是就咱们那个目标表的主键或者是唯一键啊,对吧,这样,当然那个主键唯一键我们在那也没有写死,我们给他是不是设了一个参数啊,对吧,是这样的啊,当然那当这样这样为止,到到现在为止呢,我们这个export data的函数就算是讲解完毕了啊OK,那接下来我们要做的工作应该是是不是应该去调用这个函数啊,你这个函数光声明是不是不会。
11:49
执行啊,对吧?那怎么调用啊,往下走,哎,下边呢,就是根据我们传的参数哎,去决定我到底应该导哪张表的数据了,大家注意啊,这个DOLLAR1跟此处的这个DOLLAR1它是同一个吗?肯定不是一个,对吧?那这个是不是有作用域的呀,对吧?那这个DOLLAR1指的是谁?是这个函数的第一个参数吧?那下面Dollar了一是整个脚本的第一个参数,这个理解一下啊好,我们来看一下这块怎么写的,如果我们传的是ADS activity space,那我是不是就调用ex explore一个函数,然后传递一个参数,第一个参数是什么?是不是咱们要导那个表的表名对不对?第二个参数是什么?是不是就是这张表它所对应的那个主键或者是文一件呀,对吧?OK,那下边每张表都是一样的,那如果我们这儿传的是哦,那它就会干啥,是不是执行所有表的导出语句啊,对吧?诶,那这就是我们词库分导数据的这个脚本的全部内容,其实不是很复杂对吧?啊好,那现在我们ctrl a ctrl c给它创建出来啊。
12:44
来,那现在呢,我们进到这个加入的并目录里面,然后现在呢,我们创建一个这个脚本,这个脚本的名字叫啥?咱们就叫做h DFS to my circle完来个点SH,其实这个名字我们为什么叫做hds to my circle,我们为什么不叫什么have to my circle,因为导出是不是只能导HDS文件啊,对吧?啊来咱们回车完之后呢,摁一下这个A,然后粘贴好,那完之后shift内来加上我们这个执行权限啊,加S。
13:14
传什么参,是不是传一个二就行了,需要传日期吗?是不需要的,对吧?那现在我们直接回车就可以了啊好,那这个脚本呢,需要执行一段时间啊,那所以我现在呢,把视频暂停一下,一会儿我们再来查看结果,好那这个脚本呢,已经执行完毕了啊,那现在呢,我们去查看一下结果,去哪查看结果呀。是不是应该去买circleq当中查看结果对不对,如果出现了我们ADS层的表的数据,那就说明这个数据已经导出成功了,对吧?那现在呢,我们去检查一下啊,而且我们打开一个J工具,然后找到我们j ma report这个库,对吧?那我们随便的检查几张表,比如说先看第一张。
14:00
啊,那这张表当中呢,已经有了我们14号这一天的计算结果了,对吧?那OK,我们再来看第二张,那第二张呢,也有14号的统计结果,好,我们再来看一张啊,那第三张表呢,也有14号的数据,对吧?那其余表呢,我们就不再一一查看了啊,应该是没有问题的,OK,那到现在呢,我们此库导出任务就算是结束了。
我来说两句