00:00
好,那按照刚才我们所说呢,好像我们这个问题就解决了,对吧,也确实可以解决啊SKU,然后我们通过反射去获取,在这边呃,那SKU呢,传进来对吧,就是假如传一个这个,呃,Column啊,咱们这个参数呢,就叫column就得了列对吧,表跟列啊,然后呢,你就获取这个列,然后呢,通过反射的方式把这个值获取到就行了,但是呢,这种方式反射呀,由于在当前项目当中我们已经用过了,我们就不用反射了,诶我不用反射了。不要用反射了,对吧,我换一种啊换一种。这种方案呢,未来在工作的时候,或者说我们接下来说这种方案其实呢,你天天都在用。啊,你天天都在用。啊,怎么样呢,你看啊。现在呢,咱不是说要通过这个input来获取对应的这张表的主键吗?对吧?如果你关联的SQ info,那你就获取SQID,如果你关联SQF,那你就关联s po ID。
01:08
对吧,诶,这是我们所提到的这个事情啊啊,那我们还有一套方案怎么做呢?来注意看啊,这个呢,我保证你啊,就不说天天用,至少我们写代码的时候。一直在用这种方案,对吧?这就是设计框架的一种思路,叫模板方法。模板方法的一个设计方式,设计模式啊,那怎么做呢?那咱们不是这个方法里边,你要通过反射你才能写吗?而且反射你获取的字段你还得从外面传递过来,那我们不从外面传过来,我们怎么做呢?那也很麻烦,对吧。好,咱们这样,你看啊,里边我写的是泛型。对吧?哎,我在定义这个函数的时候,它这个泛型,但是当我们调用这个函数的时候呢。它是不是就具体的类型了。当我们调用这个函数,它是不是具体类型啊,且我们也知道它用哪张表了,对不对?当我们调用的时候,它是不是比你封装的时候确定的东西要更多一些,没毛病吧?好,那咱们怎么做呢?来注意看啊。
02:15
这个方法是不是现在我们没办法写这个方法呀。那不好意思,没办法写,不写了。诶。呃。啊,错了,这个我怎么一直想着写那个。Static静态的啊,我把它变成一个什么。抽象方法。CTRLC拿过来,那你这个类肯定要变成什么。抽象类。对吧,你这个类肯定也要变成抽象类,好,那下来既然你有抽象方法,这个呢就错了哦,大家回车。实现这个方法get key,然后在这呢步点叫get skid。
03:10
你告诉我,你是不是天天用。只要你写代码,你写Spark代码,这些东西是不是天天都在用。是不是?对吧。写一个,因为这里边儿东西呢,咱们没办法确定对吧,那。因为我里面写的是泛心,我写的是个T。我没办法确定。那我怎么办呢?我就不写了,对吧,你不是说这里边要返回一个SQID或者SD吗?我也不知道你返回啥呀,我不写了。对吧,我不知道你要干嘛,那怎么呢,不写了,你到外面谁调用谁写,因为刚才我提到了,当你调用的时候,你的一切一切都是确定的,比如说你的类型是确定的,对吧,你要关联的这张表是确定的,那么下来既然表确定了,你要从这个数据里面获取的这个字段。
04:09
是不是也是确定的。是不是?对吧,你要获取的这个字段是不是也确定的,比如说你在下面关联SPU表。那你这是不是写的DMSP,这获取的get SPD能理解吗?这是模板方法。对吧,你是不是天天都在用啊。对吧,哎,你像方总所说的map,我们使用的这个map函数是不是一样的呀,对吧,你看啊,我们呢,你有一个rich map function,它里边呢,提供了一个抽象的map风吧,啊这个类里边这对吧。这个类里边一定有一个抽象的map方法。对吧,他自己是一个抽象类,因为我也不知道将来的用户他这个map会写什么呀,包括这个类型他都不写死对吧?啊,那我类型也不确定,诶它这个in类型就跟我们写的T是一个道理嘛,对吧,只不过说咱们两个分两个类型是一样的,所以我写了两个T。
05:11
里面呢就是T对吧,它跟这个不一样的吗。那你告诉我,人家在封装框架的时候,他知道调用的人未来用这个web干嘛吗?他也不知道对吧,他怎么知道?那你调用map方法要干什么事儿,封装框架的人怎么可能知道?不知道他为了通用对吧,他呢写泛型写抽象方法,那我们也一样,我们也为了通用写泛型写。抽象方法。对吧,我只知道这个E。啊,要。关联为表,我只知道做这个事儿,但是你要关联哪张为表?你关联这个维表当中哪一条数据?我不得而知。我封装这个。
06:01
工具类的时候我没办法知道,那怎么办呢?我就不写谁调用谁写,因为你调用者肯定知道你关联什么表,你要的是哪个姿态。能明白吗,这个东西。啊。这个慢慢的咱们写代码的高度给提上来,以前呢,就根据需求对吧,需求要什么咱们就写什么,你不能这样玩,你这样玩的话,你到工作的时候,你未来这个项目就很难维护,你懂吧,就是你代码越来越多,越来越多,你以后呢,你写一个需求。你疯了,你所有东西呢?再来一套。对吧。你就得再来一套。能懂吧,那我们这样写了就不需要再来了啊,那这个就搞定了,搞定完以后呢,咱们就得到了这个维表信息,CTRL加V得到一个d in for,对吧,那么接下来在这边if give in for,它不等于none的话。
07:04
啊,如果它不等于,那我们是不是应该把这个d in for数据把它补充到这个泛型里边,对吧,那是不是又是同理了,那我们怎么做,大家告诉我这个地方。啊,那你看这还是一个泛型对吧,那我这个DM呢,可能是skuku。对了,这个大家应该能反应过来的啊,我们还是一样的写一个什么。我写一个抽象方法吧,然后呢,这边放音付的点付对吧,还是写一个抽象方法啊,这个呢,大家就应该。
08:02
能学会的啊,就要能学会了,懂吧,好告诉大家回车创建这个。呃,方法。对吧,还是写一个抽象方法出去啊,那当然了,这个东西我们看到X调。这个呢,不写不写呢,加一个分号对吧,这边呢,嗯,Public。然后abstract写一个抽象方法对吧?好,那外面呢,我们就能写了,Out加。回车实现这个状元的方法。啊,那这里边就好写了呀,那input点我们要补什么东西啊,要补这个SPD trademark ID开出一个三的ID对吧,点set,呃,然后呢,PUID对吧,从d for当中点。Get STEM啊,获取PU。ID啊,然后呢,Input点。
09:01
Set。然后trademark。Mid对吧?啊d in for.get stream啊,咱们呢叫t m mid啊,我记得t mid,但是这里边呢,可能我这个呃,字段你写的有问题,但没关系,等会呢,我们能找到啊,那set category3的ID对吧?那点in for.get stream a category。三小玩意ad注意大写啊,对吧,那我们要补的,假如说要补的字段就这几个,那我们就这样写就好了,因为我们呢也一样道理,我们在里面呢,并不给他。写死,因为你也没办法写死。说实话。对吧,你怎么有办法写死呢,他写不了。对吧,啊,你这个根本就没办法写词,因为首先第一你看啊,我们既然这样写的,我关联skuo,我要的这三个字段,那我如果关联SPU呢,我要的就是s PU name对吧,你在里边又不好写,因为每一张表要的字段都不一样,是不是还是写不了这个问题,所以呢,跟刚才提取这个。
10:12
主见用同理。用一样的方法对吧,我们呢,写成一个诶。这样的写出去就好了。对吧,写这个抽象方法,谁调用谁写,因为当你调用的时候。都确定了。啊,都尘埃落定了对吧?好,那这一步呢,就搞定了啊补充上补充上去之后呢,把结果写出啊,就是刚才我们看到这个这个呢,最后我们写一下。啊,他要他这里边要一个connection啊,要一个集合对吧,但是我们这有单条数据,那我们呢,就点S把这个T呢,呃,诶是T啊哎不是T是input t对象,但是呢,对象的名字叫input啊对象的名字叫input OK了,这样就返回了,好那这里边有一常,那我们怎么办呢。
11:04
如果说这边抓到异常了,我应该怎么办呢?就是说他获取连接,或者说在获取这个维表的时候出现错误了,因为我们当时说了,这里边异常我们是抛出来谁调用谁处理,对吧?这属于工具类啊,那如果我们想一下这个异常发生了,发生了的话,那我们关联这个为表肯定就怎么样。关联不成功对吧?好,那如果你在这个,嗯,工作当中呢,如果关联微表不成功,那你就觉得这个东西呢,一定不行,那你就把这个异常处理了,得这任务挂掉,如果你觉得。诶,假如说你这个需求啊,不是那么的重要,对吧,你关联这个。为表你管理为表失败了,呃,也无所谓,比如说啊也无所谓,对吧,那就没关系啊。啊,那当然就没关系了。对吧,啊,就直接你你可以把它try catch掉啊try catch掉。
12:03
对吧,好,那我们呢,就继续我们看啊,这个地方对于我们来说还好,对吧,我们就直接,嗯,假如说catch一下吧,对吧,把这个数据呢,给他开catch掉啊,然后呢,如果说他发生异常了,我把这个数据打印一下,对吧,我们自己知道一下。OK吧,如果你想要任务挂掉也行,任务挂掉也行,你也是try catch try开完之后呢,嗯,你再手动抛一个运行啊,这个运行时异常对吧,这个是编译时异常,那变异时异常你必须要处理啊,必须要处理的好,那我们呢,把这个。选中对吧,选中count out加T啊,因为它这里面好几个地方都有异常嘛,对吧,我们都要处理啊,现在我们就直接在这加一个这个。嗯。拆开,假如说叫这个。Finally哎,我怎么踹翻不对啊?这样我们直接开开吧,对吧,啊,我们就认为如果他有这个异常了之后呢,我们就统一处理一下这边。
13:05
啊,其余分支呢,都不要了,我直接抓一个这个exception对吧,好,那这个是关联微表失败,比如说啊在这边等一句话啊。关联为表失败对吧,好,那我们再写一下,呃,这样对吧。哎,这边冒号啊,嗯,是哪一条数据对吧?啊,哪一条数据在拼接上逗号啊table。是哪一条数据去关联哪一张表,我们得知道一下可以吧,对吧,把这个表明呢啊传进来对吧,我们打印一下,当然如果说你呢,想这个任务挂掉,你就不做这个打印,你怎么做呢?你呢,呃在这through一个,你有一个wrong time exception,我们之前是不是做过这种方式啊,能明白吧,诶你想这个挂掉,你要不想挂掉,那你就这样写一下,只是说呢,你把这个数据记录下来了,对吧,最后这个抽这边呢,我们处理一下啊,假如说没关联上,就是也没报错,但是就是超时了,由于超时了对吧,我们这边打印一下啊a time out。
14:11
太啊,然后呢。Input,我把这个数据呢,也加一个time out都打印可以吧?啊这样的方式呢,咱们就容易区分,诶到底是什么原因导致这个们关联上,诶是这里边发生异常了对吧?当然你这边呢,我们也可以把这个异常信息啊呃,打印一下,说实话如果说发生异常了,你只是打印这句话,异常的被你吞掉了,你也不好解决,所以呢,我们还是把这个异常信息打印一下,同时呢,打印这句话。可以吧,啊这样的话呢,就呃方便我们定位错误,因为我们呢,希望未来都能够关联上,对吧?啊,假如说你希望如果挂着你就直接抛异常出去也行啊,你有一个这个。Time exception对吧?这个就看你公司当中怎么去定义这个要求的,对吧?看这维必要关联对于你这个整个计算来说重不重要,如果很重要,那你就挂掉,如果,嗯,还好,某一条没关系上。
15:04
那无所谓对吧,那你也可以打印,当然你要是这条数据想要,那你在这儿把这个东西呢,这样。你在这儿也写一份,那就是原始数据写出去了。对吧,原始数据写出去了啊,但是呢,你得把这个信息记录下来,到底哪一条数据没关联上,他有问题OK吧?啊,你就原始记录一下,如果说你不想要了,假如没关联上你就不想要了,但是呢,丢了这么一条数据也无所谓,那你就不写这个对吧,它里边有很多种不同的一个。处理方法啊,它有很多种不同的处理方法,对吧?好,这是我们所说的一个点,那到这个为止呢,咱们关联维表的一个操作啊,终于就。做完了。对吧,好,那前面呢,我们也已经写完了啊,写完之后呢,CTRL加V得到一个。哎,我已经得到这个变变量啊,这已经有了,有了之后呢,我们可以在这边做一个打印。
16:04
对吧,我们可以做一个测试,看这个维表呢,到底能不能够去。关联上啊,那包括我们再检查一下这个字段名称对不对,以及我们关联字段有没有少啊,首先这里边我们看一下,呃,这两字段先不用管啊,Trademark ID有了。呃,这个一二先不用管三这个ID对吧,补充这个字奶油了啊,然后set不用管SKUID,哎,这本身有U的ID,本身有SK ID name account amount ts,好,那我们这关联的字段呢,也没有问题。对吧,好,那接下来我们确认一下这个字段有没有写错。有没有写错,指的什么意思啊,就是这个地方,这个名字我有没有写错啊,那怎么看呢?你切到这来。啊,咱们切到这来来看啊。呃。表。啊,然后我们看这个叫。
17:01
哎,不能看它啊,嗯。啊,这个地方还比较麻烦,我们应该找那个。为表去看啊,为表去看,那我们关联的字段呢,我们就告诉你这个我写的呃,TMID啊,这些没有问题,等会呢,我们再来解释一下这个东西啊,解压这个这个东西。好,那我们先把这个呢就写完了,对吧,我们关联的就是这几个字段要补充上。要补充上OK吧,好,这个就。
我来说两句