00:00
首先呢,我们把这个这标语句写一下,这里面呢是窗口时间加上两个数量对吧,一个TS啊,然后呢,后面东西都一样啊CTRLC拿过来,诶错了,站错位置了对吧,不能在这啊。好,那这样。啊,那么接下来呢,我们去写招B啊,叫use login b还是一样的,就是这五个字段对吧。然后呢,把这个拿过来。好,而这五个接下来呢,我们到DWS里边创建一个。累。按照我们所写的PM对吧,那。第一步。获取执行环境。
01:10
呃,读取还是卡不卡。这个叫。页面。日志主题创建流对吧,好。第三步,那就是过滤和转换数据,对吧,转换数据。为对象并过滤数据,并过滤数据对吧。但过滤条件我们说了UID它不等于呢。啊,同时满足上一跳为。空或者上一跳为。Log对吧,两种情况啊,这个都满足我们的条件好,那接下来第四个,那我们可以先提取训练时间对吧。
02:07
好,那第五。按照UID分组,分组以后呢使用。状态编程获取。独立。用户。提取独立用户以及。叫七日。回流。用户对吧,以及七日回流用户啊好,那这个已经搞定了之后。结构已经转换了,我们就是开窗聚合。对吧,又到这一步了,开张就好,这一步应该提的非常多了啊,开张就好。开窗聚合以后呢?咱们可以将数据写到可以耗对吧,这后面都一样啊。
03:05
第九步。启动任务对吧,啊启动任务啊好,那接下来呢,我们就是第一个获取执行环境到这。C拿过来往那一放,对吧,第二个。读取数据。啊,然后呢,页面浏览日志,然后创建流对吧,这个呢,我们直接把它拿过来啊。嗯,小微两组呢,我来换一下啊。你不能用那个消费者组了。这个看起来很奇怪,User user log对吧?啊,那是用户域,然后呢,用户登录对吧?或者说呢,你要觉得很奇怪,这东西看着不爽对吧,你还不如交这个要用户登录对吧?你什么用户域啊,暂时先就不要了,OK吧,这样就至少看着舒服一点啊好,那接下来呢,转化式结构并过滤数据啊,跟刚才一样,就过滤条件不一样呗,对吧,那就是卡夫卡点点。
04:18
莱啊,有一个莱曼,然后呢,返回数据是杰森object类型。嗯,jason.pass object value得到一个JA object,好。接下来呢,我们要获取这个UID,而且呢,获取这个上一跳页的ID,得根据它来做判断,对吧?好,那UID我们来看一下在哪啊,呃,UID呢,其实也在这个common字段里边,注意啊,在common字段里边叫UID,上一跳页面ID不用说了,在配置里边对吧?这个有一个上一跳页面ID,好,那么接下来呢,咱们就可以写了。获取两个东西对吧,嗯,杰森object,点该杰森object先获取common。
05:02
在get再获取我们的。UID啊,这个呢,得到UID,接下来呢,jason.get先获取配置,然后再获取叫last配置ID,对吧,这个呢,我们就得到了一个last。配置ID,那接下来我们就通过他俩做判断,对吧,刚才我们说的if这个UID,它不等于那。啊。并且哎,括号。里边东西呢,是这样的,它呢。等等于那对吧,或者。点谁吧。对吧,注意这里边呢,是有locking数据。为了不写错我们俩,哎。当前页面是login,诶当前页面哎,这个是上一条页面是log,看见没。对吧,啊,那这个是登录页面啊,登录页面,然后呢,这个是登录之后的,对吧,是这种情况啊好,那这个就搞定。
06:09
啊,那我们就可以把数据输出out.connect接算,这是过滤加转换,我们同时做了对吧,还是跟它一样啊。这个是Jason object。对吧,这个是转化为尖子项。提取。获取。UID以及。上一跳页面ID对吧,这个是判断。嗯。当。UID不等于。空,并且上一跳页面为空。或者为。
07:01
Login。为log才是目标数据才是。登录数据OK吧,啊,才是这个登录数据啊,咱们就这样来聊啊好,那这个呢,就杰森奥DS它呢就搞定了啊好,那还是一样的,到这一步呢,我们。好,那接下来呢,提取这个世界山间山寨worldmark,这个很简单啊点。嗯,我不想写了,我真不想写了这个东西。没有什么意义对吧,直接拿过来得了,OK吧,这个直接拿过来啊,没什么好说的,按UID分组,点T。杰森。点该come come,然后。Get a string。叫UID对吧,这样的话我们就得到了一个KSTEM,得到一个监控。
08:01
对吧,咱们就得到了一个监控流,OK吧,好,这样的话呢,就是呃,按照UID分组了,提取了我的B,接下来我们就。做这个事,这个刚才我们已经分析清楚了,我们有一个状态就够了,只不过说不需要设置这个TTL了,对吧?监控流按照装态编程的方式,那reachled map还是一样的,因为要转换结构为user loging b,对吧。点。有一个叫rich。啊,叫user。Logging b啊,返回这肯定是他啊,好,那我们先定义状态。Private。然后呢,Value。Three。叫last。Logging state。Open啊,这个呢,也不需要那个什么。
09:02
TP了,所以上我们就直接在这看点。Last。Logging。Street。诶,怎么总是敲出来啊这class。好,那这个呢就搞定了,接下来在这里边用的时候呢,我们很明显又要拿着状态时间与当前时间做比较,对吧,那毋庸置疑肯定要获取状态。日期以及当前数据日期。对吧,好,那。接下来在这啊,嗯,状态里边日期很好写,那就是last log see.value。好,那这个呢,就得到了一个last logy dt,对吧,当前的那data form u.to。啊,这个TS呢,我们单独拎出来y.get。
10:07
Yes。嗯,接下来在这边。Current。DT。啊,看集体好,那按照我们所说的,我们又要定义两个变量,对吧,定义。这个,呃,当日。独立。用户数。And。七日。回流用户数对吧,两个东西啊好。那首先呢,一个浪类型。因为。你好,我就叫优贝了。还有一个那叫。对吧,回流啊,默认的都是零,我们先定义好,接下来呢判断。
11:02
好判断。首先当这个状态为long的时候,我们。有文章要做。对吧,啊,当状态为钠。啊好,那if。Last dt等等于浪的时候。单运荡的时候呢。那肯定他改为一,他不动。对吧,因为你状态为,那说明你是一个新用户,你不可能是回流对吧,以前没登录过,我认为啊,那就直接改UV。为一就好了。哎,把UV91L。啊,接下来判断什么呢?你俩是否相等对吧,那else逻辑呢,你俩。你肯定不等于now了,不等于now呢,我们判断你们俩是否相等啊,Else if对吧?Else if继续判断,那就是你不等于now,所以呢,我们把它写在前面,Equals啊,呃,等于谁呢?等于这个CGD,这两个是相等,那我不要相等的,我要不等的,对吧?
12:05
如果你俩呢,不等。啊,就是你不等于呢,但是呢,你俩不等,那这个UV也要改,为什么也要改为一对吧,也要改为一啊。好,那同时还有一件事就是你俩不等了,你UV肯定是一,但是此时我back UV呢不知道对吧,所以呢,还得在这里边做一个判断啊,IF2个差值大于等于八,或者说呢,大于七对吧,差值大于七。呃,这个是七天,这玩意儿怎么写呢,那我就。简单的写法可以吧,我我这样做啊,来看啊。呃,咱们这样玩怎么怎么玩呢,括起来。That。For卖,我看一下我的有九店。Two ts。
13:00
To ts啊。嗯。这边。To ts,接下来呢,我们是last loging dt,然后呢,后面给一个false啊,那我们来说一下这个force什么意思啊,这边呢,写了一个出跟force啊,这个呢叫in for。是否是全的啊,什么意思呢?看啊我们呢,写了两个方法,看这里边调用的是谁呢?调用的是另外一个方法叫它。就是这边还有一个默认的。啊,默认就是false对吧,你也可以直接调这个,你可以调它啊,那么就跟大家说一下这个,这是干什么事呢?是这样子的。因为我们有两种数据啊,一种呢是年月日。第一种年月日,一种呢是年月日,还有加什么时分秒对吧,两种数据呢,我们都有可能需要转成一个时间戳,没毛病吧,好,那我们呢,就写了一个方法,其实啊,写了一个谁呢一个这个方法。
14:02
Is for对吧,True跟false啊,那如果你是true,如果你这传的true,那就这种就是全的,全的就是年月十分秒都有,那如果是false,你只有年月日,你只有年月日,你统一的都想用年月日十分秒的方法,那怎么办呢?如果你这个是false对吧,那这个判断为true,为true的话呢,我给你日期加上一个000000。能明白吧,就是统一辰年月日十分秒这种格式做处理啊,当然对于我们这边来说呢,这个地方。你可以不传。对吧,啊,你可以不传it for啊,因为默认的它是什么,它就是。False,对吧,啊,但是我刚才是为了给大家说明这个问题啊啊,那这个呢,是以前的对吧,同理咱们应该还有一个。这个地方呢,是康地铁,哎,用当天时间的转化成日期减去它对吧,然后它括起来除以谁呢?除以一天的。
15:08
好法数啊,那我们简单啊,24小时对吧,乘以这小时60分钟。一分钟60秒,一秒钟。你想好没有对吧,我这玩意呢,大于七。啊,大于七,或者说你写大于等于八对吧,按照文档,我们按照文档来吧,大于等于八对吧,因为这个除出来肯定是一个正常值对吧?啊大于等于八,如果是这样的话,那怎么办?那说明我们是一个得是一个回流,那就是。Back。UV。置为一。是为一对吧,好,那我们把这个数据搞定了,但是还缺一点东西,就是状态要。更新一下对吧,在哪要更新呢?呃,这里边要更新的对吧?啊在这肯定要更新的啊,那更新一下状态,那就是last。
16:06
点update好,那还有一个位置在这,你也要更新一下对吧。叫CRDT对吧,好,那这两个呢,都要更新我们的一个状态,OK吧,这个逻辑有没有问题,就是比刚才我们看的逻辑要简单一点,因为两个零的我们就没处理了嘛。对吧,好,你等等于none。判断处理,你不等于呢,我们就判断你是否相等,不相等,在不相等的基础上再判断,注意不是写在这l if啊,不是写在这l if,而是写在这里边对吧,就是你俩以不相等为前提,你才减它有可能大于等于八呀。你俩相等怎么可能,那肯定是零啊,对吧,不用判断了,如果你俩相等的话,对吧,就不用管了。这个逻辑比刚才我们聊的可能要简单一点,写出来啊,这个能明白吗?这块。
17:09
没有问题的,扣一好吧。好,那我们就过了,这是我们的判断对吧,那接下来呢,我们要把数据写出啊。If。这个UV。它等等于一,我就可以写出。还有一个。叫use loging b或者说呢,你要你要安全起见,对吧,你要不等于0L,这样是不是也行啊,都行啊好,那这边呢,首先stt edt。然后是V对吧,然后是。Back UV还有一个TS啊好,那这边有同学可能有疑问,上一个需求呢,我们判断两个任意一个不等于零都行,那这块你凭什么就判断它,你不应该这样写吗?它不等于零,或者说这个back UV不等于零。
18:15
对吧,我把它写完你看一下啊,不等于。0L,你看这玩意儿怎么样,直接给你。飘黄,他说他说什么东西啊,他说这个东西判断。永远。你都不用管他。对吧,它不等于零。啊,Always什么false。为什么?因为你想想看啊,咱们。能判断到这儿说明什么问题,说明这个东西是零,才会走到第二个判断吧,对吧?说明UV等于零才会走到第二个判断,但你想啊,如果UV都等于零。他都不是今天的一个什么第一条数据,它都是今天的第二条第三条它有可能是回流吗。
19:09
他有没有可能是回流啊,它不可能对吧,你看他什么时候改为一的,只要你改为一,我这个东西B是一,它不可能是零,也就是说我们想一下一零的关系啊,它俩呢,同时为一对吧?呃,有一零啊,有这个零零有可能零一。但是你想这种情况存在吗?注意这个是UV,这个是back。第三种情况,它存不存在,有没有可能他不是今天的独立用户,但是是。回流,这可能吗?这可能吗?就是他其实实际上只有这三种情况是不是。对吧,这种情况是不存在的,能明白吗?
20:01
能不能明白?就是这种情况根本不存在,那不属于今天的独立用户,但是它属于这个回流怎么可能啊。怎么可能对吧?所以是第三种根本不存在,那这个判断你加了也白在,人家给你标黄了对吧?只要判断出来它永远都是false,因为你只要这个等于零,他们它一定等于零,对吧,你不用想,所以这个判断可以不要对吧,就在于这儿啊,所以呢,我刚才写的时候直接就没写对吧,因为你写出来I idea也建议你把它干掉,没有用。白判断了对吧,浪费时间啊好,CTRL加V,那我们就得到了一个什么呀,叫use login。Yes。哎,那这个呢,我们就搞定了,对吧,把这个。开窗聚合啊,你你真的你写到最后呢,是不想写了,我已经,反正我已经写错了啊。
21:00
WINDOW2开窗对吧。十秒。V6的方式。Or?他们懂对吧。好,那要改的就是它啊,返回Y612个值,改一下Y61点。啊是我不我不写了,可以吧,我直接拿一下了啊,这都没有意义啊,再写了。说实话,真没有意义。这个东西拿不来。真不想写了对吧,写它干啥呀?Back,两个back相加,两个UV相加对吧,这个获取值啊啊,我也不写注释了,因为就没什么关系了啊VALUE06:01位点。Next到现在为止,大家对于这个东西肯定很熟了啊呃,next.set叫EDG啊,那date for点。
22:12
ST。是吧,获取数据。补充字段。把这数据呢写出啊,那开窗去和得到了一个VDS啊。叫麦。有。中间加一个表明的括号Y64啊,应该是还有五个对吧。
23:05
五个,然后呢,表明我去拿一下啊。就是汤对吧,这个表我们已经见过了,对吧,在这啊谁那个。哎,这个表在这啊。好,那表明呢,往这一放五个字段没有问题啊dna.q。往那一放。这个呢就不要了,对吧,好这块就搞定了啊做测试它呢,嗯,还是来自于这个配置log对吧,所以它的流程呢,跟刚才我们写的这个配。这个detail这个一样对吧?啊home detail这个完全一样啊,往那一放啊,改一个地方就改谁呢就改这个他自己对吧,自己这个主类改一下就好了,呃,那么此时呢,我们服务端都是开的,而且呢,这个贝斯APP我就没关对吧,因为要测啊,他呢就关掉了,无所谓对吧,然后呢,把它提起来。
24:14
我们就造数据就好了,对吧。好,那这边有了,接下来呢,我们来造数据啊,还是Lg.SH走,还是用的5月24号的数据啊。走一下这边呢,又有很多数据了,对吧,他呢肯定会积善人,那这边啊。呃,Back是22,悠悠是零诶。
25:00
啊,我封装字段封装错了,那就应该UU是零,肯定有问题啊。UV。呃。U,我看一下啊,是哪块有问题啊?它它这个值打印的是UU等于零,它是back有数据对吧,那肯定有问题嘛,对吧,那不用想肯定有问题啊好,那我们看一下这个地方是我这边。放个屁。啊,我这两个写反了。这个是。UV对吧,刚才我这个写反了啊,You log先写back,再是独立用户对吧?啊,这两个写反了应该是这样才对啊,那不可能说不可能说会出现这种back是有数据的,然后它是反而没有数据对吧?不可能这样啊,因为这个地方刚才我们看错了,就写反了对吧?这两个值我刚才写反了啊,导致这种情况啊啊,那这个没关系,我们重新启动一下啊。
26:07
你一看就是。肯定是我们的,哎,那你。Back第一天那back肯定是零对吧,啊悠悠肯定是有数据的,因为你第一天嘛,相当于对吧,那如果说我想看到这个也不是零,我有没有办法呀。有办法对吧,那你得多造一点数据啊来。我想干什么事呢?我想等会儿这个东西不等于零对吧,我也想看到它不等于零啊,有没有办法呢?有办法啊,看这个数据啊,我们多造一点,因为多造一点呢,我们还要改时间,现在呢,我们数据是5月24号对吧,那我加一个八天。啊,那就是32 32的话,就六月我搞一个6月2号6月3号就行了,对吧,五月31天,31天31天32号是6月1号对吧,6月1号的话,那我们那我们呢,直接搞一个6月2号,6月2号的数据就可以了,对吧?好,那这个第一天啊,头一天bag肯定都是零,那毋庸置疑。
27:07
对吧,头一天肯定都是零,那不可能有回流嘛,你这。一个平台新开哪来的回流呢,对吧,好,那么接下来呢,我再造一点数据啊,为了数据多一点,因为我的。呃,这个数据量会比较大一点,这样的话容易出现就是两天重复数据对吧,它才会导致是就是两天的UID相同啊,5月24号跟6月2号或者6月3号这个数据UID相同,它才是这个回流啊,它才是回流对吧。好,这个时候应该差不多了啊,那咱们呢,Application把这个呢,我改成六月。6月2号或者三号对吧。嗯,直接给零三吧,直接给零三啊,好保存退出,接下来呢,XXYC,我们把这个103也要触发一下这个数据啊,那这边呢,应该已经把之前的数据都消费完了啊,现在都是零,因为只有5月24号数据肯定都是零,不用想啊,你造再多它也是零。
28:10
对吧,只要你代码,那要不出现零,反而代码有问题对吧,好,然后这一边还在这走。接下来我们看啊,我们希望能看到这个back CT不等于零的情况,那那这个还是5月24号最后一个窗口啊,对吧,这个没问题啊。诶,你看6月3号是不是有了50,但是比他小那正常嘛,对吧,回流用户比你当日的这个独立用户肯定要小。没毛病吧啊,所以你得这样去测才可以啊,你不能说我日期不改,我直接呢就这样测,你要是日期不改直接测这玩意儿呢,永远都是零。就是你只要代码写的越对,他越是零,你反而你代码可能写错了,就刚才我那个地方对吧,写反了,诶你看到它不是零,那但是但是后面是零,那不可能出现这种情况对吧?好,那这是我们的数据啊,所以你造数据的时候要注意一下,你都要改改一下这个日期,然后呢,它俩差值得在。
29:06
八天啊,你得大于等于八才可以。OK吗,这块。应该没有啥问题吧?对吗?能明白吧,到时候大家自己做测试的时候也要注意啊,你要这块要改日期去测的,如果你不改日期,那么你的back这个回流用户永远都是零。很正常吧,因为你第一天嘛,哪来的回流呢,它肯定都是零了啊好,那这块呢,咱们就。测试完成啊。
我来说两句