00:00
好,那接下来呢,我们来聊一下它的一个实现的。思路。对吧,我们聊一下实验思路,刚才呢,我们做了一个需求分析,就是里边要做三件事,第一个一条过滤,对吧,第二个新老访客状态的。修复第三个分流,用测输出流来做了一个分流,对吧,当然这块呢,有非常长的一个文字的描述啊,大家呢,可以自己去看一下啊,但是呢,其实也还好,你也可以不用看,我们就直接看这个啊,因为还是那个问题,为了出书啊,所以呢,前面我们大量的有这个文字篇幅,但实际上呢,就会嗯,就是。我们不需要去看啊,我们不需要去看,我们直接去看什么呢?看这个PPT啊,看这个PPT就好了,OK吧?啊,然后这里边就有详细的一个内容啊,那我们来看一下啊在这边。啊,就是把我们思路串起来,把里边明细呢写出来了而已啊,第一个我们还是消费这个ods层的数据,对吧,消费的是topic log这个主题的数据,它呢包含的这五种日志啊呃,那第一步呢,我们就做一个ETL啊,判断它是否为杰森,如果不是杰森对吧?那就写到这个测输出流对吧?那我们就直接做解析,让他报错啊,这种方式啊,我们前面也写过啊,只不过说前面没有写到测出流,直接把它扔了而已啊,那六页呢,假如说我们想要把它写到测试流也可以吧,啊,写到测输出流啊,然后呢,输出。
01:33
啊,如果能正常转化为阶色呢,那我们就保留这个数据对吧,正常的写到我们叫主流啊,一个次数流一个主流。那么接下来当然就是我们要对数据进行新老。校验。对吧,做这个处理好,最核心的呢,我们已经说过了,就说对于一这个数据。我们要怎么做?对吧,啊好,那我们来看啊第一个。这个地方呢,比较复杂啊,这个状态编程呢,就是我们当前这个需求最复杂的一块就是它了啊好,那首先如果这个IS6等于一对吧,我们主要的这是主要模块对吧?啊,为零的我们也要处理一下,等会我们跟家说为什么为零的要处理一下,但是注意啊,这个处理数据不改啊,不会改数据对吧,一有可能会要改数据啊,那如果呢,你的is new值为一,我们判断。
02:27
这个状态它是否等于钠?对吧,我要判断这个状态是否为等于那啊,那如果说你一六是一。啊,你的is new是一对吧,且。你的状态为呢?那我就认为你这个确实是一个新的啊,那有同学可能在想,哎,他会不会出现这种情况呢说。我呢以前登录过,我中间呢,卸载了,我重新安装了对吧,但是呢,你的实时任务对吧,在这个时间点就是刚好你的实时计算啊,在这个位置,在这个时间点开的,那这个呢,它应该是零,但是呢,你不做处理一,那这种我们就不管了。
03:15
对吧,因为我是实时计算,不对特别早的历史数据做校验,我就认为诶他就是一,他从这一刻开始,从我计算这一刻开始,那新增的以前的我消费不到的这个老的数据不管了,因为毕竟我是一个实时计算。不是离线。OK吧,我是一个实时计算,不是离线那个数据我们就不管了。听懂。啊,我们就不管了,你就不用管这个事对吧,所以呢,简单,如果你的is new为一,且状态为now,那我就认为你是一个。新用户。你今天都是新用户。对吧,在今天里边你都是。
04:00
新用户啊,那我们怎么做呢?我们就把这个。日期更新的状态里边啊,当然这个地方啊,就看你是只要这一条作为新访客的数据还是说。你刚下载这个软件,登录的头一天。都做新访客对吧,那如果是头一天的话,那我把日期更新进去,如果无所谓,你假如说只要第一条,我只要这么一条。那你状态里边随便放点东西都行。啊,大家思考一下刚才我们所说的问题啊,这边有两种情况啊,当然这个就是公司的一个需求而定了,对吧?啊,每个公司可能不一样啊,那我们在想啊,什么意思呢?假如说。我实打实就是今天。刚下的软件对吧,以前从来没有下载过啊,就是实打实今天刚下载的确实新用户对吧?啊,那我呢,这个数据肯定会有很多种。
05:02
啊,咱的数据呢,肯定会有很多很多条,对吧?啊,我上午登录了访问了一下,下午呢,又登录了访问了一下。对吧,好,那有可能前台呢,今天都保留的是一对吧,那么。你最终写出去的数据就看你自己了。如果说你希望对吧。只要第一条。那无所谓,你装在里面放什么都可以,如果呢,你还跟他一样,今天。我都让他保保持一对吧,到了明天,如果你再出现一,不是今天了,非今天对吧,你再出现一,那我就改为零。对吧,那这个注意你的状态里边呢,一定要保留日期。一定是保留一个日期,年月日。这个能明白吗?因为你不光要做这个状态是否为那么判断,还得判断当前这个日期是否相同,对吧。如果相同,你还得保持一。
06:04
啊,如果你的日期跟里面相同,你还得是一。对吗?能能明白吗。能能听明白刚才我们所说的吧。对吧,这个当然具体怎么操作。那公司当中他会有这个。需求的规定对吧,它到底是保留一天为一,还是说我只要第一条对吧?啊,两种方案不一样啊,两种方案呢会不一样,OK了,好,那这是我们说的第一个啊呃,第二个如果状态不等于呢。来看啊。且首次访问日期不是当日。这就刚才我们所说的,所以呢,我们刚才写的是将日期更新到状态里边。对吧,那这边呢,如果你状态它不等于呢。
07:01
啊,你的状态它不等于呢。那我们呢?还要继续判断判断。我们的首次访问日期也就这个对吧,状态里边数据你不等于,那么那你一定有这个日期对吧,跟我当前数据日期是否相同。那如果说。你不等于呢,且也不同。哎,那你这个日期呢,可能是这个3月18号,我这个日期呢,是5月4号。那我这个5月4号还带着一来了,我是不是要把这个一改为什么。改为零,大家想一下这个问题对吧,它是不同的,一个3月8号,一个5月4号,比如说啊。是不是5月4号这里边如果你的数据是一,我是不是要把它改为零。对不对。想一下。思考一下对吧,因为这就涉及到逻辑,就是等会我们写代码就全都是if else判断对吧,所以呢,我们要先把这个能想明白,你代码才能写的出来,才不会出错,要不然的话你逻辑没想通。
08:12
你写的时候不容易出错嘛,对吧?啊38号假如说是我。刚下载这个软件登录的对吧,然后呢,我把这个日期3月8号日期写到状态里边了,中间呢,我隔了一段时间我卸载了,卸载之后呢,5月4号我又重新下回来,重新下回来呢,他给我的标记写的是一。对吧,但是这个一呢,确实要改为什么。要改为零对不对。能明白吗?就是3月8号,我实打实。新下载的软件对吧,那我状态里边写的就是3月8号。啊,但是中间我卸载了,我到5月4号又重新下载了,重新下载我们说了它的标记呢,很有可能给我们的是一,但是这个一就不应该是一,对吧,我们要把这个东西改为什么。
09:05
要改为零。对吧,大家想一下这个逻辑,就是我们说的这一步。思考一下对吧。想一想,能不能想明白这个问题?对吧,不要光在这儿看啊,那不行,得动脑子去想,去思考,对吧。啊。这会儿能好一些了,对吧?啊,有不少同学来扣一了啊好,这是我们说的这个逻辑对吧,因为我们数据里边都有这个时间戳嘛,啊时间戳转化成日期也比较简单啊好,那这是一个点第三个。啊啊,那如果你的监控状态它不是呢。
10:00
且两个日期相等,那就不做操作。对吧,那就保留一嘛,还是一写出去,因为我要的是今天都维持为一,对吧,是这个意思。好,那这是一组啊。接下来。如果为零呢?如果为零,注意数据。我们不做操作。数据本身不做操作,因为他前台校验就是零,那就不用管了,他肯定是零对吧?啊数据本身呢不改。但是。状态。有一点东西了,对吧,好,那我们干什么事呢?这个点啊,是我们扩展的一个东西来看啊,看有没有道理,对吧,如果你的一六为零。但是呢,你状态为呢。说明什么问题啊?你状态为呢,诶这就能够有时候能够避免掉一点我们之前所遇到的问题,什么意思呢?你看啊,前面我下载访问了,中间呢我卸载了。
11:06
啊,这段时间我卸载了啊,这是我第一次下载对吧?啊这个呢是我第二次下载,这个位置是我第二次下载。第二次下载。呃,如果对于零,我们不做任何处理。对吧,那我们之前说的它呢,就会出现有一点小小的瑕疵,什么瑕疵啊来看啊,比如说我从这个时候。啊,假如说我从这个时候。才开始。计算实时任务。我从这个时候才开始计算实时任务,哎,它呢就是第一天啊,这个里边的数据呢,第一天的数据啊,它都是一啊,比如说第一天都是一,后面呢,那都是零对吧?哎,那我们就稍微写一下,这都是零零啊这个这个一个格子代表一天啊。
12:01
这个一个格子代表一天可以吧,哎,我是从这一天开始访问的,好你是零,我不做处理对吧,不做处理好,那么接下来呢,我把它卸载了,卸载了重新装了这个地方,它这一天对吧,假如说这个还是我们说的3月8号,这个呢是5月4号。那么5月4号它是不是又是一样,这一天的数据是不是又是一样?那如果说啊。如果说。我对于零的这个东西呢,我不做任何操作那。这个5月4号,他是不是会被写到状态里边,认为5月4号是一个新的用户,新的访客。就是我我说的是对于零这个情况,我们不做任何操作。他是不是认为5月4号就是我们当前这个逻辑对吧,按照这个逻辑走零不做任何处理对吧,一到一判断,诶撞在里边看有没有数据,那我之前来的都是零零不做任何操作,那我这个一来的时候。必然状态里边是空的。
13:02
对吧,好,那这个时候状态里边如果是空的,那这个一呢,今天都是一,它并不会改为零,对不对。想一想,这个来想一想。想通的可以给我扣个一。对吧,情况我再说一下,我边说你边想,3月8号实打实首次下载,5月4号是中间卸载了重新下载的。啊啊,那么38号这一天呢,都是一,后面都是零,但是呢。我有可能实时计算,从这个时间点对吧,从这个3月20号吧,我才开始。啊,我从3月20号才开始做这个实时计算,那我刚做实时计算,我的所有的状态都是呢。都是空的。对吧?啊,那如果按照我们之前所说零呢,我就不做任何处理。
14:03
我之前说的是零,我肯定对数据不做处理,对吧,数据本身我们不管,那如果说对于状态我也不做处理,那5月4号重新下载以后,这一天的一是不是还是保留着一了。大家想。他是不是还是一直都是一写出去啊,就是5月4号这一天,到了5月5号,如果你还是一,我可能就改为零了。对吧,这个问题能想明白吗?啊,给一点时间,大家呢,自己去捋捋。这个能想明白吧,好,那我们其实想的这个5月4号这一天呢,你也应该给我是什么改成零啊,你不要给我给给一对吧,你并不是新访客,老早你就访问过了,对吧,你要改为零,但是我状态为,那我怎么改为零呢?所以很简单来看啊,如果我数据它是零。
15:17
且状态等于闹。说明以前就。注册过对吧,诶访问过,但是呢,你实时计算是推后了,是有这种情况存在对吧,那我就干什么呢,我把这个日期啊。改为昨天,我把状态改为昨天,诶你不是说刚才我们讲3月8号你是首次登录,但是呢,这个数据我没有读到,因为我从3月20号才开始做计算,但是3月20号来的数据就是零,那我把状态呢改成什么?改成3月19号,我把它更新的3月19号不让它是个闹,因为我3月20号就已经是零了,说明这个数据。
16:00
Mid在3月2号之前一定有访问过,对吧,那我也不知道哪一天,我就改成前一天改成19号,那你接下来5月4号一一来了一看,诶状态里面有数据。对吧,且5月4号跟3月19号不等,那我就要把这个改为零。对吧,我们这样的话。是不是把有一些数据,由于我们计算在后,数据先来计算在后,有中间有这种瑕疵,把一部分给它能够解决掉啊。是不是我们可以解决掉一部分这样的数据啊?对吧,当然有一部分解决不了,什么解决不了呢?诶访问,然后呢,卸载访问,你在这儿开始计算。你从这个时候开始计算,那没办法对吧,你这个M压根就不会来数据一第一条就是一,那我这个。没办法对吧,除非你说把所有的m mid保存到数据库里边做一个校验,不用状态对吧,你才能做到精细,那我们呢,其实对于这种新老访客也不用如此的精细,对吧?啊,我们就这种就不管了,但是呢,我们能解决一部分就解决一部分。
17:05
对吧,所以呢,就多了这么个逻辑。OK吧,就是解决掉一定瑕疵的啊好,那如果你等于零。但是你状态不等于呢,那就不用管了,什么都不做。对吧啊,你状态不等于呢,你是零,那不刚好,那不就正常的一个情况嘛,对吧,你是零,你状态有数据对吧,以前的数据那我就不管了,不做任何操作,OK吧,这个就是不做任何操作啊好,那这个搞定,搞定好以后呢,我们把修改后的数据。写出来,写出来之后呢,要做分流了吧,哎,使用测输入流做分流,那我们呢分五个,然后呢,分别写到五个不同的。主题里边啊,这个呢,就是特殊流,其实最核心最复杂的应该是一部对吧。那这个分流那就看里边的关键词了,比如说启动日志它有大对吧,嗯,页面日志它有配置。
18:00
曝光它有place。动作有actions AR数据,错误数据对吧,有ER啊,注意它不是errorr,是ER啊,等会儿呢,我们都会带着大家找到这个关键词,那你就根据关键词做一个分流呗,就行了,对吧,这个呢,反而会简单一点啊,最复杂的呢,其实就是中间这个。对吧,好好,那其实有的公司呢,如果说他本来就会做后台校验,那这一步你就不用做了。你就不需要做了,对吧,假如说有的公司他会做这个后台校验的话,你就不用做这个事儿了,就是简单一点啊,咱们呢,就是前台买点,前台买点,且不做后台校验啊,我们就可能会需要做这样的事情啊,这样的话也相当于对我们Li里边状态编程再做一次练习嘛,对吧?啊就多练一点,多敲一下代码,肯定会更好一点啊,到时候大家会发现我们设计这个需求的时候,尽量的呢,就把这个。需求。我复杂的去设计设计。
19:00
啊,因为这样的话,就可以让大家更多的能够练习到我们所学习过的一些知识点,OK了,啊这个意思好,呃,这个呢是我们整个的一个思路。啊,肿瘤的一个思路就在这儿,OK吧,当然呢,我们这样啊,呃,最复杂的这一步呢,我给大家摘出来,等会儿呢,我们可以看着这个来写,对吧。好,那就这个吧,我把它拎出来对吧,我们就可以等会呢,按照这个来写啊,等会儿。这样的话就不容易出错,就完全按照这个逻辑来写,对吧,好,那这个呢,就干掉我们思路就。搞定。
我来说两句