00:00
啊好了各位啊呃,那现在呢,我们一起来把上午最后一节课布置的用户路径分析这个小需求给他实现一下啊呃,就是按照咱们上午的这个分析呢,呃,我们其实呃做这个需求对吧,那咱们需要拿到什么样的最终结果,这就取决于什么呢?取决于就是最终。对吧,咱们去做可视化的时候,那咱们这个商机图他需要什么对吧?那他需要什么样的数据,那我就要给他准备什么样的数据,那他需要的数据是什么呢?实际上他需要我们提供的就是每一种页面跳转的次数,对吧?那我们一个页面跳转是不是就由一对source和target去表示啊,对吧?那所以实际上呢。咱们这个需求的关键就在于到底用什么作为source,用什么去作为target,对吧?啊按照我们上午的分析呢,我们是这么去说的啊,我们说用lets配配置ID作为source,然后用,呃,这个就是配配置ID,也就是本页ID作为target,对吧?但是你这么直接用他做的话呢,得到的结果是不满足桑基陀的要求的,桑基图有两个要求,一个就是S斯不能为空,第二个呢,就是不能存在环,那所以这两点我们都满足对吧?所以其实咱们这儿呢,主要就是为了解决这俩问题,把他俩解决了,那咱这个需求相当就做出来了啊,是这样的啊好,那接下来呢,咱们就来看一看这个具体怎么去解决啊,呃,然后咱们做这个需求的时候呢,仍然是先给他简化一下,暂时先不考虑统计周期的事儿,我们先只算一个最近一天七和三十一会儿再说啊好,那既然要算最近一天,那我们就应该是不是只拿最近一天的数据就行了呀,对吧?那这个按照我们之前的分析呢,我们应该从哪取出DWD层的是不是这个traffic流量域里边的配置为右这张实时表里取啊,对吧,来我们。
01:41
只需要拿它最近一天的数据,VRDT等于2020杠零六杠幺四,好,最近一天的数据先拿出来,那之后呢,那怎么怎么处理啊啊,之前我们是取个last配置IDE作为S对吧?取个配置IDE作为这个他类的对吧?这个显然是不行的,那怎么处理来着?哎,咱们这俩问题一个一个解决,先解决第一个S不能为空,呃,咱们S不能为空的解决思路很直接,怎么去做呢?来,我们原来是上页ID作为S,本页ID作为他来的,对吧?那我们现在把它转换一下,我怎么转呢?我用本页ID作为source,用下一页的ID作为target对吧?好,那现在关键问题是如何拿到下一页的ID呢?其实这个很简单,那当我们把一个会画里边的所有页面浏览记录,按照浏览时间从小到大排好序之后,对不对,那我这个每个页面ID,它的下一行的页面ID是不是就是它的下页ID啊,对不对,那怎样呃,去拿大家现在应该就很清楚了,我们是不是应该用一个海啊对吧。
02:41
吧,用谁呢?就用lead函数就行,对吧?好,那现在呢,咱们去拿一下啊,那也就是说我们上面的这个配last其实咱用不着对吧?诶给它删掉就行,好,那接下来呢,我们就给它来一个例函数啊led。啊,OK,那这个力的函数呢,大家都知道怎么用,里边呢,我们正常是需要传三个参数的,但其实这个也不一定非得传三个啊,你看它这是怎么去描述的。
03:06
你看是不是有方括号啊,对吧,方括号意味着什么来着,这个参数可选的对吧?OK啊,那实际上呢,你会发现这里面这个方括号还是嵌套的。对不对,这有一个方框,里边第三个大招是不是又有一个方框,对吧,这个是什么意思呢。啊,这个意思就是说你这个函数既可以传一个参数,也可以传两个参数,也可以传三个参数,是这样的,这个大家可以稍微的理解一下啊好,那接下来呢,咱们就来看一看这个到底是怎么去玩了啊第一个参数肯定就是传列名就完事了,对吧?第二参数那个off outside,就是你要获取下边几行对吧?那完了之后这个底这个呢,就是默认值对不对?那后边这俩要不传的话,那它们的值是多少呢?诶给大家说一下啊,Off outside,你要不传默认就是几就是一啊,OK,那这个default默认值你要不传的话,那是什么呢?No啊,是这样的啊OK,好,那咱们这儿呢,要获取的是哪个字段,我们来填一下,我们要获取的是配置ID这个字段,对吧?OK,那完了之后我们要获取下边几行,是不是就是下边一行啊对吧?那我们如果拿不到的话,我取什么呢?我就给他一个now对吧?所以实际上呢,我们后边这俩参数是不是就没必要传了,对不?你不传是不是默认值就是它呀,对吧?这个大家理解一下啊,行了,那咱们这写一个配置ID就可以,然后我们继续往后看啊,后边咱们怎么办呢?是不是可以给他传,Over里边可以写呃什么part o啊对吧?好,那现在我们看一下这个part,咱们拜谁?
04:28
是不是应该拜谁?在塞ID吧,应该是没问题吧,咱们得按照绘画进行问句啊好,那接下来咱继续往后走,后边我们应该选谁,应该选一个order,是不是那个时间就行对吧?OK,在这张表呢,我们没有TS了,我们给它格式化成了time了,所以这儿呢就order time就可以了,OK,好,那截止到现在呢,我们就已经拿到了咱们所期望的那个N配置ID对吧?PA,然后下游线ID就咱这个呢,就已经拿到了,拿到之后我们把它执行一下啊来稍微等一下再来看我们现在是不是就已经由上页到本页转换成了由本页到诶下一页了呀,对吧?OK,那咱现在就拿到了啊呃,然后这个数据不知道大家能不能看明白,这是咋回事啊。
05:13
这个大家能不能看明白,这个猜应该大概能猜出来,上边这应该是一个单独的绘画吧,对不对,这是不是只浏览,只浏览一个页面啊,对吧?OK,浏览home,然后下一页就没有了,对吧?然后下面这个是不是应该是另一个回话,对吧,Home到40 40到这儿,咱们最后是不是从支付再往后就没有了,就是退出了呀,对吧?是这样的一个逻辑啊,这个理解一下好了,那接下来咱们继续往下走,下边儿一个问题是什么是不能存在环,这个问题咱怎么解决来着。怎么进来着?哎,我们的解决方案是在我们一个绘画当中,我们所浏览的每个页面后边是不是加上一个序号啊,对吧?OK,好,那这个序号怎么去加呢?那大家注意观察,这其实就相当于是,诶不是少画了一个啊,这其实就相当于是一个完整的绘画,对吧?啊,那这个怎么加呀,这个序号咱们先不说怎么加,咱先说,哎,这个加完之后的结果,咱们应该保证的是什么样的。
06:07
这个是他浏览的第几个页面第一个对不对,那我这儿是不是应该加一个序号一啊对不对,那这个呢,是他浏览的加第二一个嘛,对吧,从这到这儿,这儿是不是应该写一个二,对不对,那接下来继续往下走,那这儿呢。这个写几。这个也是二吧,对不对,因为我们这相当于从一到了二,然后是不是二到了三呢,对吧,我所以这儿呢应该是二,这应该是三,那这个呢,是不是应该是三,这个是四对吧,就是依次类推,这应该是123456789,那这边呢,应该是23456789对不对?好,那现在这是我们最终要加上的结果,好怎么加。哎,怎么讲。咱们用什么加,是不是也用一个开关函数加就行了,对不对?那比如说在这儿呢,我们可以用一个rank函数,对吧?RA函数呢,我们是不是也要有O,呃,也有part呀,对吧?那咱们part是不是也session ID就行了,对吧?那older呢,也是按照时间进行排序,好那加完之后我们是不会得到一个这样的字段呀,对吧?123456789是不是会得到这样一个值,好那完之后我们是不是直接把它跟这个拼一下,就得到了我们的最终的S了,对不对?好,那这边怎么办呢?
07:17
这边是不是基于它加个一就完事了,对不对,那那其实就是这么个逻辑吧,对吧?所以在这儿呢,我们还需要再去写一个哎,开窗函数,那现在我们直接给它写上就行,在这呢,我们来一个哎,Rank rank里边呢,我们还是写part by session ID,然后呢,后边来一个order by,应该是will time,对吧,那这个呢,我们起名为RK,那就OK了,行了,那截止到现在我们这儿呢,其实基本上相当于就已经呃,完成了咱们这个操作了啊好,完成之后我们先来看一下这个效果啊,我执行一下。看这个长什么样,来大家来看一下,你看。这个应该是一个单独的绘画,它是不是只到一呀,对吧?那下边是一个另外的一个新的绘画,它是从一一直到九的,这个没有问题,对吧?好了,那这个加上之后我们呃,再往下看啊,下边我们是不是只要再做一个工作就行了,什么工作是是做一个简单的拼接处理就行了,对吧?咱们得把这个序号跟我这个页面的ID是不是得拼接在一块啊,对吧?那拼的话在这我们为了方便,我们来一个查询吧,来我们这个拿过来CTRLV,呃之后呢,我们往前给他推一把啊,这个我们起名为T,然后呢,咱来一个select from题啊OK,好,那现在呢,我们就来看一看这里边具体怎么去做啊,首先我们需要先去,呃,把这个配置ID跟这个rank是不是直接进行一个拼接呀,对吧?呃,这个拼的时候咱怎么拼啊,我们按照文档的这个要求去拼,那看文档最终拼成什么效果了,拼成了一个说代序号冒号再加这个页面对吧?那咱们也按照它这个来啊,呃,首先我们需要先来一个慷泰的对吧,里边先写上一个s TP step。
08:51
对吧?然后后边呢,是不是再来一个,呃,这个杠啊对吧,杠杠后边呢,我们再加上那个具体的2K对吧?那后边再怎么办?是不是再来一个冒号吧,然后后边呢,再加上我们那个配置IDOK,那这样一来是不是咱就得到了我们那个最终的source了,对吧?好,那接下来我们再看那个target怎么得到,Target是不是也是用慷开里边呢,咱也给它拼上一个step,然后横盖,后边咱得拼上RK加一才行对吧?然后后边呢,我们继续往往下进行,这也来一个冒号,然后下边跟谁跟那个下1ID就是next的配置ID对吧?哎,把它拿过来,拿过来之后我们就得到了最终的这个是不是target get了呀,对吧?然后呢,我们执行一下。
09:32
来大家看下这个效果,你看现在是不是就已经实现了我们想要的那个效果了,对吧?已经加上序号了啊,然后大家注意观察一下,你看这里边原来如果就是在我们没加序号的时候啊,它应该是有环的,你看哪就能看出来,你就看这原来是不是有一个good detail到log in,又有log in到good detail啊对吧,原来是有环的,但是现在呢,诶,咱们整体来看它就没活了,对不对,诶这个大家应该是诶比较能够能够直观的看出来的啊,行了,那这截止到现在呢,我们的S和target就算是处理完毕了,对不对,但这个并不是我们最终想要的啊,咱最终想要的是什么来着,是每种跳转的是不是次数啊对吧?那所以说我现在应该怎么办呢?我们现在得到这个结果,是不是一行就表示有一次这样的跳转,对不对?那我们应该怎么办呢?是不是应该是分组聚合一下就完事了,对不对?那接下来呢,我们CTRLX把它放在一个括号当中,呃,这边呢,咱给它往前推一下啊呃,这个起个边名,我们叫做T2,然后呢,Select from这个T2啊好,那下边呢,我们应该是做一个。
10:32
分组聚合,诶我们go拜一下,那group拜拜谁呢?就拜是不是S加上target就行了,对吧?这就是我们最开始的那个思路啊对吧?然后呢,我们找到这个source,找到这个呃,Target,然后呢,再来一个啥就行,再来一个count芯,诶那这样一来咱就能得到最终的这个结果了,诶当然这个结果说实话咱们可能看不太出来它到底是否准确对吧?呃,这个说实话我们肉眼没法看,因为这个结果它本身也不是给人看的,对不对,它是给神看的,是不是给那个呃三级图对吧?他去渲染图的时候,他需要看的呀,对吧?等他把这个图渲染出来,那我们就能够看明白了,是这样的啊,这个结果应该是没什么问题的,因为咱们的逻辑按照我们的分析应该是OK的啊行了,那这个完成之后,我把这个视频给他停一下啊呃,来。
11:20
呃,好了各位,那刚才呢,我们已经完成了这个最近一日的用户路径的分析了,那接下来呢,我们分析一下七和30的我们应该怎么去做,来吧,咱一起来分析分析,大家说七和30的咱怎么去做呀。怎么做呀,其实还是分两种思路对吧,那一种思路我可以怎么办?我是不是可以先把这个给他CTRLC咱们复制一下对吧,复制完之后我只需要改哪儿,咱们就能到最近七天的统计结务,只需要改这个市时表的这个分区是不是就行了,对不对,我只需要拿到那截止今天的最近七天的分区就完事了,对吧?那我们来一个date,应该是DT就不能等于了,应该叫是不是大于等于啊对吧?来把当天日期给它放进去,后边呢,减一个六对不对,那相当于我拿到的就是七天的,诶这个页面浏览记录了,对吧?拿到七天页面浏览记录,我再进行一个相同的这样的一个处理,OK,那我们就能得到最近七天的路径分析,OK啊好,那30的是不是也是同样的道理,对吧,只需要把它拿过来,我们把六是不是改成29,那就完事了呀,对吧?诶那七和30咱也就都算出来了,那当然了,都算出来之后,咱是不是会得到三个子查询,这三个子查询我们需要干啥,是不是需要把它们拼接在一块儿啊。
12:36
对吧,好,那现在问题来了,你在拼接的时候应该用哪种方式呢?是不是仍然需要使用union的方式啊,对吧,因为咱们不同的统计周期是放在不同的行的,对不对?那所以说你得用于念上下拼接,OK,那这个就是我们大家最容易想到一种思路啊呃,当然在这儿呢,我们就不这么去写了。因为这么写仍然存在咱们之前那个问题,对吧,你会发现这些三考是不是看起来也差不太多呀,对吧,那完了之后呢,咱们也是写了好几遍,对不对,那这个显然不太合适,那我们还是按照之前的那个逻辑去做啊,咱们分析分析,看能不能把这几个紫查询给它合并一下,好来咱们分析分析。
13:14
啊,这个我们目前写了两个啊,一个是1D的,一个是7D的,我标注一下这是1D,那下边那个呢,是7D对吧,30的我就不写了啊,大家知道怎么回事,那我来分析分析,你说我能不能把他们合并在一块儿,能不能合并,其实能不能合并啊,或者说怎么合并,咱还是得分析分析,就是这些子查学啊,他们有什么区别,有什么这个联系,对吧?那我们现在还是先看联系,联系也就是它们的相同点是什么,相同点是什么,相同点其实还是啥。还是聚合逻辑完全相同对不对?你看啊,就是它可能这儿有子查询,但是甭管它有没有子查询,它其实每一层子查询,我们这个处理逻辑是不是都是完全一样的对不对?你看啊,就里边儿,首先我们先来了一个这个这这个先来了一个什么呢?先来了一个这个开窗对不对,完了之后拼接,那这边呢,也是开窗,然后也是拼接,对不对?然后最外层呢,是不是按照什么s target的分组,然后上边进行聚合,这边是不是也是按照ST分组,然后进行聚合的,对吧?也就是说我们总体的聚合逻辑是完全一样的,唯一的不同是什么呢?还是说他们处理的数据不一样,对吧?这个只处理了这张表的一个分区,那下面这个呢,处理了这个表的七个分区,那如果我们把30D也写出来,你会发现它是不是处理就是这张表的30个分区啊,对吧?诶,这就是它们的一个区别和联系,那总结一下呢,跟之前是一样的规律,他们仍然是在对不同的数据进行相同的聚合处理,对吧?啊是这个道理吧,OK,那所以说咱这还。
14:44
可以,怎么这样呢?还可以借助一下咱们之前那个思想,对吧?我们设法拿到这样的三份数据,第一份儿呢,我应该只包含这张表的一天的分区,然后呢,这个第二份呢包含七个,第三份的包含30个,然后呢,给他们各自是不是寻找一个标记啊,对吧?那完了之后呢,我们再按照一个标记字段进行分组聚合,那是不是就完事了,对吧?那跟之前那个规律其实是一样的,好,那咱接下来呢,就看一看我们这个,呃,这种方案应该怎么去实现啊,来,那现在呢,咱们给它标注一下,那这个呢,我先写上一个,呃,方案一,这个方案一也留着啊,这个方案一不是不行,行啊,这个也可以啊,只是没有下边这个方案二简洁啊,来我们看方案二,方二呢,是不是咱就基于这个方案一给他改一改就行啊,对吧,稍微的调整一下来,咱给他拿过来好了,那现在呢,我们开始改啊,那改的话我们从哪开始改起呢。
15:37
是不是应该从最内层开始改写啊,对吧?那首先我们需要先干啥,是不是也是需要先拿到那样的三份数据,一个是七,一个是30,一个是一,对吧,先拿三份数据好,这个怎么呢?是不是还是在from这个表明后边咱们加上一个对不对?然后呢,我后边跟上一个ex pro explo里边是不是给它放上一个固定长度的数组,一,七和30,那就完事了,对吧?后边我们补上这个语法啊,As啊,这个date das好了,那这样一来我们就已经将是不是原表是不是给它分成三份了呀,对吧?这三份目前来说它们的行数是完全一样的,对不对?然后他们唯一的区别呢,就是什么?就是我们炸出来的这个字段,他们可能是不一样的,对吧?第一份这个字段是不是全是一,第二份全是七,第三份是不全是30啊,对吧?好,那接下来我们怎么办呢?是不是还是得通过这个过滤条件,是不是让第一份只留一个分区,第二份留七个,第三份就30个呀,对吧?还是得写这个过滤条件啊。
16:37
过滤条件怎么写,大家现在应该很清楚,对吧?我们也是直接来一个DT大于等于,然后呢,来一个data是不是I呀,对吧,或data sub都行啊,来把它放进去,然后当天日记写放进去,后边呢,我们跟上一个谁跟上一个瑞森代词,这得减个一才行,对吧?啊,因为这个天数咱们差一,这个得搞清楚啊,好了,那这样一来的话,我们就已经完成了咱们的第一步工作了,那就是啥呢?把原始数据准备好了,哎,一共有三份,分别是一个分区,七个分区,30个分区,好,那接下来咱们干啥呢?
17:09
接下来其实就简单了,我们只需要怎么办,是不是加上一个分组聚合就行了,对吧?这个分组聚合呢,咱们得怎么加啊?呃,就是我习惯上呢,是从外到内去加,咱们从最外层往里边一点点的推就行了啊OK,那在这儿呢,比如说我们就从外到内去加啊,你最外层咱们这边需要做一个什么操作的同学,最外层是不是肯定得加分组对吧?OK,那完了之后,咱这儿是不是现在已经有分组了,有分组了我们就不用再额外的加那个格入拜了啊,那有分组完了之后,我们只需要在现有的分组字段的基础之上,是不是加上一个recent death就可以了,对吧?啊,OK,那当然呢,我们最终的结果当中需不需要用到那个recent death呢?其实是需要的,对吧?所以在这儿呢,咱们把这个re this也给它放在最终的这个来的结果当中来给它放进来,好,那接下来咱们继续往下进行,你看啊,我们直接在这加的话,它肯定会报错,为什么会报错呢?很简单,呃,对吧,因为我们现在最外层你select from是T2这个自查询,对吧?那T2它返回的结果当中有re类吗?没有没有,肯定会报错吗?对吧?所以说你外边要想用,那就得怎么办呢?那是不是就得在里边给他拿出来呀,对吧?那当然我T2这边想拿的话,他也拿不到,为什么呢?因为T2的字段是来自于T1的,T1我这儿返回re字段了吗?没有,没有的话,那是不是咱们也应该让他返回出来才行啊,对吧?那这儿应该是能拿到的吧?
18:31
对吧,为啥?因为我们这儿是不是炸裂之后的这个虚表当中会多出来一个recent,它这选是能选的,对吧?OK,那这样一来的话,我们这个字段就算是补齐了,OK,那现在呢,我们再把这个三呢给他执行一下,看一看这个效果怎么样啊,走你。好,Circle它不报错,结果已经出来了对不对,OK,好,但是这个结果它对不对呢?咱们看一看,就是左边咱们也能看出来是不是一七三十了,对吧?好,那这个结果对不对。这个结果对不对,可能还是不太好看出来,但是我们可以通过一个小细节去判断它到底对不对,哪个小细节呢?咱们就看这个序号,各位同学你看啊,就咱们这个序号最大的,现在是不是都有28这么大呀,对吧?会有20多,这个序号它不是随便加的,它是有一定的含义的,对吧?那按照我们之前这个写词的逻辑,咱这个序号应该相当于是什么?相当于是这个人在这一个绘画里边是浏览的页面的次序啊,对吧?第一个页面就是一,最后一个页面就是最后一个页面的次序,对不对?好,那我们自己模拟生成的数据,这个绘画的访问路径是不是咱们自己定的呀,对不对?好,那现在咱们去回到我们日志模拟器的配置文件啊,来,我们进到进到lo,然后打开这个帕杰森,好,大家注意观察,你看我这个最长的一种绘画。
19:46
是不是它这个路径就是这种路径啊,对不对,那咱们这个序号应该是多少呢?123,然后四五六七八九十,是不是最长的绘画我也就到十啊对吧,OK,好,那所以理论上我这儿是不是应该不会出现什么28这种这种这个序号啊对不对,OK,那所以说显然咱们这个结果它是存在一点问题的,诶大家想一想,你说这个问题它出在哪呢?
20:13
这个问题出在哪儿了?诶没错,那肯定是出在我们这个开窗上面了呗,是这个道理吧,因为本身就是乱出的串嘛,对吧,是不是肯定是这儿出问题了,这儿出什么问题了。大家想想能不能想明白?Rank over,卡其BY30ID order by view type,对吧?出什么问题了,看着挺正常的呀,对吧?这个其实哎很简单,哎看这啊看这这是方案啊,就出这这这出问题了,对吧,出什么问题了。你想一想,它怎样就会出现一个什么,等于28那么大的一个一一个值,哎,其实来咱们想一想啊,就是我们现在select from的是不是不再是原表了,对不对,我们现在select from是我们炸裂之后的那三份数据了,对不对,OK,好,那三份数据呢,咱们都知道,一个是最近一天,一个是最近七天,一个是最近30天,对吧?那那咱们来想一想,你说最近一天的这个数据是不是会在咱这个结果当中出现三遍。
21:18
对吧,你最近七天里边是不是也包含最近一天,那我最近30也包含最近一天嘛,对吧?所以最近一天的数据会包含三遍,啥意思呢?也是假如我这儿呢,在最近一天里边有一个绘画对不对?OK,那实际上呢,在我们这个结果当中,应该是有三个是不是完全相同的这样的一个绘画呀,对不对,因为你七和30里边都有的嘛,对不对?OK,那这三个绘画你想一想他们的绘画ID是不是完全一样的。对不对,因为是同一份变成了三份嘛,对吧,那是完全一样,既然完全一样,那你想一想,我这儿part提身派30ID的时候,是不是就会把这三个绘画分到一个分区里边对不对?OK,那假定啊,我这个绘画的长度呢,它就是多少就是十,假定就是十啊,OK,好,那完之后我变成三倍之后,这个长度是不是就变成30了呀,对吧,没问题吧,所以说我们就会出现那个序号过大的一个问题,OK,也就是问题就是出在这儿,好问题咋解决呢?
22:15
怎么解决呀?是不是正常情况下,你这个三份数据,诶一七三十,咱们再去加这个开窗的时候,他不能让他们互相影响,对吧,你自己算自己的对不对啊,这是我们期望得到的一个效果,那怎样能让他们自己算自己的呢?其实很简单,只需要我们在分区字段里边再加上一个recent内就行了,对吧?OK,那这样一来是不是最近一天的这个会话他自己算了对吧?最近七天的自己算,最近30的是不是自己算呀,对吧?诶是这样的,所以在这呢,我们应当给它加上一个re this,那同理,你说这个要不要加呢?这个也要加上一个re代啊好了,那这样一来的话,那咱们这个呃方案二对吧,才算是诶写完整啊来,那现在我们再执行一下这个circle考啊看一下这个效果,你看现在还有刚才我们看到的这种异常数据吗?是不是就没有了,对吧,这个呃序号现在最大是不是就到十了,对吧?诶,这是正常的,好了,各位同学,那截止到现在我们这个需求就算是诶完事了,但然最终呢,我们还需要再给它补上一些这个字段,呃,这儿呢需要有一个DT对吧,那我们把这个DT给它写上,呃,我就在方案二里边写了啊,那补的话相对比较简单,我们这儿也是直接给他一个常量值就行,对吧,零六杠幺四好,完事之后呢,我们最终再给他来上一个IN3的就行了,但是IN3的方式跟之前那个是不是一样啊,对吧。
23:33
先查出来,再union,再insert,哎,是这么一个逻辑,这个我就不再不再写了啊,大家知道怎么写就行了啊好,这个需求咱们到此就完了。
我来说两句