00:00
好,那回到刚才的问题对吧,那大家都说呢,用状态编程做这个去除,那我就。第一个,你在想要不要做替代。对吧,如果要替班,那按什么做替班。啊,那大家说的按照凹的ID进行替代,好,那我们稍微写一下啊,要按照凹的。ID进行T。对吧,好,那。让他装装在里面存什么?按照奥ID进行KPI,然后状态里边存什么?状态中存什么?告诉我。对吧,你要用状态编程嘛,你肯定想明白了,状态里边存什么嘛,诶这个问题就交给大家去思考。
01:02
啊,然后有两个答案啊,一个呢,说用map存这个。All ID啊,另外一个呢。说用value state存这个。呃,那如果真的是要从奥黛丽,大家觉得哪个可以?哪个就哪个就行了。就是翔总,我没太明白你为什么要用map,你能给我解释一下吗?就是你这个map用的,我一脸懵,你懂吗?为啥要用麦呀,你告诉我这个地方。我不懂。你为啥会想到用个集合呀?用map state的K来实现去重啊,你都按all的ID分组了,这个map里边还能来不同的凹的ID啊。
02:06
哎,你都你刚才自己说的吧,按照all的ID进行K,你都按他进行K了,你告诉我这个状态里边还有不同的all的ID啊。我凌乱了。啊,我凌乱了。这,这还去除吗?你都已经按奥黛丽替拜了,那这个奥黛利永远只有一种。对吧。他永远只有一个呀。他只有这一种,那我为什么还要用集合呢。是不是?他不可能会出现多种啊,你都已经按奥黛利分组了,你状态里边还有可能来不同的奥黛利吗?这不可能,也就是说来的,那肯定是一样的。对吧,你来一条,来第二条,他肯定跟第一条一样的。对吧,他肯定跟第一条一样。
03:00
啊好,那我们再看啊,看这个陈总的,他说呢,这个直接pass啊,不用考虑,你都按这个K派了,那他还用卖那封了吗?对吧。好,陈总呢,按照奥代进行可办,然后呢,用value state。来存这个奥ID,接下来呢,陈总你继续说。你存这个all ID,然后呢,第一条数据来了,状态为now,我把all ID放进去可以对吧?好,第二条数据来了,状态不等于,那怎么办呢。状态,它不等于钠,怎么办呢?啊,我就假如说两条嘛,就这两条数据对吧,诶四条呢,大家不止两条,四条呢,这四条奥都一样,对吧?它会进来啊第一条进来了,好状态为呢,把奥D放进去了,没有问题对吧?第二条数据来了,奥D不等于钠,你应该怎么做呢?
04:07
你接下来干什么事?陈总,你告诉我就是这个状态,不等于那你应该干什么事。啊,又有方案又变了。啊,看等于零啊,你觉得对吗?陈总,你仔细想一想啊。你觉得看了等于零对吗?你觉得count等于零对不对呀。就是第一条数据记为一,后面的都记为零是吗?陈总你是这个意思呗,那你觉得对吗?好,你看你对于你这个数据而言,第一条来了记一,这个G0看似没毛病,对吧?那这条数据你也是零,这条数据你也是零。合适吗?
05:02
这个都是零,合不合适。他不合适。对吧,他很明显不合适啊,对不对,好,那我们再看一下这个牛总所说,牛总呢,说这个纯SKD。存SKD啊,那呃用value state存SKD吗?刘总。那你看啊,一个订单里边我按all ID分组,我要去存这个SKID,那就不能用什么了。不能用value date吧,起码得是一个集合,那list对不对啊,或者说这个地方用map都可以。对吧,因为你按照all ID来做分组,你呢,KD是有可能相同,有可能不同,你可以使用map或者用list来存集合,对吧,因为你可以有多个,你才需要用集合,对吧?像翔总刚才所说的,你都已经按all ID。
06:00
来。分组了,你还用一个集合来存all ID,那这个集合里边未来它只可能有一条数据,它不可能有多条。对吧,好好,那这个地方换成用这个list,哎,来存这个SQID,好,那接下来我大概能理解牛总所说的意思了,大家看到这块应该能能清楚了,对吧?也就是说,呃,我看这个集合当中,我第一条数据来了,集合是空的对吧?集合空的就不用管了,那么我一定这个outcome count是一对吧。哎,状态如果为,那那我countt数对吧?CT一定是一对吧,不管是谁,那都是一啊,那状态如果不等于呢?那我要取出来,取出来这个集合里边数据,看包不包含当前的SKU,如果包含了,那就是CT等于零,如果不包含,那么CT等于。一对吧,然后呢,当不包含的时候,我是不是把当前SKDD再放进去啊,它是不是有两种情况,可能是零,可能是一,呃,牛总我说的有没有毛病。
07:07
跟你的理解应该没问题吧,大家看到这块应该能知道是这个意思对不对。刘总。没毛病吧,好,你要注意啊,这块呢,差点意思差点意思啊,你还没有听清楚,刚才我详细给你表述的一个点啊,但是呢,已经很不错了,想到这一步已经很不错了,提出表扬啊,大大的点赞对吧?啊,我刚才呢说我只是拿SKUID举例子。相同的对吧,因为这样好举例子,为什么呢?因为你SKUID相同,那我能保证你的SPU。TRADEMARK1231定都相同。对吧,一定是相同的,但是有没有可能你看啊这边。嗯,比如说他吧,他啊呃。
08:00
SKUID不同对吧,123。SKUID不同,但是他们的s PU trademark category是相同的。能懂吗?好,那比如说我现在呢,不是两个16,而是SKU,是一和SKU。二。啊,我SQ1跟SQ2。那怎么办呢?你只是按SKU去去重。不够吧。是不是不够啊?牛总,你能体会到,或者其他同学能理解我的意思吗?就是这一边牛总所说的方案来存SQID对吧?啊,如果呢,它等于no,那就直接写一对吧,如果不等于now,那就是CT等于零或者说一,当然要看包不包含当前这条数据的SKD对吧?关键我的问题是什么?最后呢,你要注意啊,你求的这个outcome count是在什么?
09:04
纬度下呀。你是在这些个维度下。研究什么意思呢?有可能你的SKUID不同,但是。这些东西是相同的,对吧,它也属于同一个订单,你看啊123对吧,用户肯定一样吧,因为我是来自于同一个订单,用户肯定是同一个,对吧,123呢,我发现123件商品,它的s PU trademark加。三一样的,那看这个三是一样的,那二一肯定是一样的,不用想了,对吧。那也就是换句话说,实际上这儿呢,我还不能存KD,我得存什么东西啊。完了,毁了。我得存柚子。Category。SK。
10:03
啊,Keg对吧,Trademarkeg。是不是要存这些东西?对吧,那这个好像就很复杂了,我们就得换方案了,对吧?好,那这块呢,而且啊,呃,就是这块呢,我们要再聊一下啊,那如果说呢,你要存这些个东西,你得先有吧,好那还记得当时我们说的说什么事吗?先。转化为。招聘。然后。关联。为秒。啊,你关联维表以后才会有这些个信息。对吧。好。那。接下来怎么办呢?然后呢,我们去考虑这个去重对吧?好驱虫呢是对凹的ID进行去重。
11:04
完了回了,现在呢,好像感觉全乱了这个东西对吧,注意啊,把这个一捋你就明白了,首先呢,我们之前想的是不是这个逻辑。先呢要转化为招聘,然后呢去关联这个维表。对吧,而我们去重单独考虑驱虫的时候呢,又要用到这个维表的信息,所以呢,去重逻辑是不是应该在关联为表之后,那所以呢,咱们整个逻辑大的逻辑方向是不是应该这样,就是先。转换招病,然后关联维表,关联表好以后再去驱虫,驱虫的时候呢,还得用到奥代D那换句话说,在我们招病里边不光要放SKID,还得放什么all ID,你得把all ID带到下游才能考虑alld驱动,如果说你在转招聘的时候,这个地方没有alld,那毁了你下游就没办法系统了。
12:01
对不对。没毛病吧,啊,就没办法去重了,而且呢,你这样去重啊不好啊,我们换一种方案啊,你你不是说要按照这个。接下来要干什么事了就去重,如果不考虑去虫啊,我把它拎出去对吧?不考虑去虫的话,那么接下来关联维表好,以后我们要干什么事,分组开窗去合是不是?分组。开窗。聚合。啊,咱们要做分组开窗聚合。对吧,好,呃,那我们就想着这个驱虫工作呢,我们能不能跟这个一起做。啊,其实可以啊,也就是说把这个驱虫工作呢,给它放在一起。聚合的时候。带上。哎。
13:00
怎么回事?聚合的时候根据凹的ID取。对吧,啊,那这个地方怎么做呢?很简单,我告诉你啊。因为呢,你。关联表以后你的分组条件。是不是就是这个。对吧,你的分组条件一定是它啊,然后呢,你要聚合,那怎么做呢?扎并里边刚才我们是不是提到了,我们扎并里边一定要有一个all ID的字段,还有印象吗?我们一定要有一个凹ID字段,因为你到下游才能够去去重,所以呢,在这块我们在扎病里边啊,放一个什么呢,放一个这个。就是你正常转化为扎并的时候,你把这个奥黛利放到这个set集合里面。
14:01
那么接下来聚合的时候,我把多个SET1拼接啊,当然不是拼接啊,就是累加到一起。我把多个set把它累加到一起。然后。最后聚合好以后,我取出S的长度。是不是就是根据这个分组得到的订单数量?想一下,看能不能想通这个道理。对吧,刚才我们单聊去虫聊到这一步很不错了啊,确实呢,可以用这种方案来实现这个驱虫。对吧,但是呢,我发现他。不能存SKU跟光SKU不行,他得存这些东西,因为你是根据这些个东西进行分组的,然后呢,去计算康德新对吧,你本来就要计算抗的新,但是我们说了要驱虫,所以呢。
15:01
你就相当于要干什么。先关联为表再去重,好,那既然你先关联为表再去重,那很明显我们的Java并里边得有凹的ID这个字段,你得把凹的ID保留下来才可以。对吧,你得把all ID保留下来才可以,好,那既然我都已经保留all的ID了,那我就可以放在最终巨额我来求这个。Outcome。对吧,订单的总数那怎么样呢?也就是说在招聘里边,咱们呢,不要放一个字符串OID,而是放一个什么呢?放一个set集合,对吧,最后聚合的时候,我把多个set给他干什么。聚合到一起,最后取出当前这个set的长度,是不是就是我们的订单数?啊,想一想啊。
16:00
这块能不能想得明白?我们是怎么一步一步的走到这儿来的,对吧,其实我也是根据大家的思路走的啊,但是中间呢,有一些引导对吧,其实还是大家靠大家自己的一个想法走到这一步的,但是呢,就差最后一点点,我把这个补了一下。对吧,因为我们刚开始呢,是关联维表跟这个去虫操作是分开去聊的啊,大家呢,思路可能有一点偏差,这个没有问题,对吧,如果单独的聊这个驱虫,确实像牛总所说的这个没有问题。对吧,但是呢,你要再结合上我们整个的需求,你得把这个顺序给捋清楚,对吧?所以呢,咱们先转化为招聘,然后关联维表,关联维表以后呢,在做这个分组开张聚合正常逻辑,对吧?但是呢,在这个之后,我们还要做一次驱虫,我们还要做一次驱虫。
17:02
对吧,所以呢,这个时候就引入了咱们招聘里边一定要有这个all的ID的字段。对吧,既然考虑到最后呢要做去重,那这个all ID的字段呢,我用一个set集合来存,最后在聚合的时候呢,我们把这个set集合怎么样。把两个赛的集合。一累加取长度就是我们的订单总数啊,订单总数也就是说在这个招聘里边呢,我们诶除了SQID之外,它还有一个。S集合也是我们的辅助字段啊,也是咱们的辅助字段,能能明白吗?对吧?啊所以呢,这个地方。我们的招聘就会比较复杂一些了,比较复杂一些了。呃,这些有很多工具类啊,这个到时候我们再聊啊,这个现在呢,都涉及不到啊,再找到咱们的这个。呃。工具类啊,这个招聘在这儿啊,在这儿对吧?啊,然后这里面呢,有一个这个。
18:06
看见没?Think还有一个他。还有个他。对吧,还有一个这个。啊,叫这个。订单的ID,然后呢,用set集合来做的啊,当然它俩呢都是属于辅助子弹,不需要。写出去啊,不需要写出去的。OK吧,不需要写出去的啊好,这是我们所聊的这个招聘的字段的问题就搞定了,基本上就这些字段啊啊,那么还有一件事情就是说呢,你看本身就这些字段了,我们又扩展了两个,那也就是说这个字段很多,而且呢,在我们第一次封装炸药病的时候啊,第一次封装扎药并的时候,你看嗯,封装扎并以后再去关联位表,也就是说这里边呢,绝大部分字段都没有值。都给个空,那给个空的话,那我去拗这个招聘啊,啊,你这个是什么病啊,你有一个病对象,然后呢,里面全是这样,诶啊全是这种对吧,没有意思对吧,所以对于这个招聘呢,我们加一点东西,我们用构造者设计模式来写这个招聘。
19:13
那就是大家之前所见到的说什么build build build这种啊,对吧,诶我去构建一个它的build的对象,然后呢,点你有什么属性,你就加什么属性,没有的用的是默认值。对吧,啊,这个招聘呢,由于字段比较多,所以呢,我们引入了一个叫构造者设计模式去写这个Java病啊,因为这样的话呢,未来我在构建这个对象的时候就。会很方便啊,就方便很多能理解吧,因为它字段比较多嘛,且你这里边儿很多字段在我第一次构建的时候呢,我不需要给,我给不了,我没有对吧,我只能给什么呢?你看这些东西都给不了。这都给不了,我只能给一个U的ID,哎,这个可以给对吧,然后呢,嗯。
20:00
这个叫什么?奥康的跟奥特曼的,奥特还给不了。All count还给不了对吧,你一零给不了,他可以给,然后给谁呢?给SKUID能给对吧,然后给那个。Set。给set,那么就是很多东西都给不了,对吧,你给不了的话,你只能写空,那你写那么多空很麻烦对吧,所以呢,我们用一个构造者设计模式。叫构造车实体模式对吧,你需要哪些字段,你就给哪些字段就好了。不需要的你就不用给啊,不需要的你就不用给,能听懂吧,所以这个需求还是确实比较麻烦一点啊,但是刚才我们所说的那些呢,其实说完就结束了,都比较简单,最复杂的是什么呢?这一步。看上去很简单的操作,但是这是最复杂的啊,关联微表啊,到时候你就知道了,这个最复杂的,你像这个东西啊,他都没有复杂。啊,它都不是那么复杂,就是你现在聊完了,基本上就搞定了,他不会有额外的事情了,就是到这块就结束了,对吧,无非就是搞一个set,然后呢。
21:02
把两个赛。累加到一起,但是关联微表看着简简单单的四个字,大家呢,也都懂对吧?知道呢,根据ID去查一下,但这里面事可不少。啊,很复杂啊,提前告诉大家了啊。
我来说两句