00:00
那接下来提取这个事件时间,生成这个water mark啊,生成what mark啊,那其实确实最好在这个K前你把这个事做一下,因为K后的话,你接下来数据可能是单个比度了。对吧,啊,好,那就是杰森ob.a sign and。还是一样的,我们还是给个两秒钟对吧,这边呢,是杰森跑不掉。好。那咱们要返回的I的点。Get along这个地方写TS对吧,大家对于这个行为处理应该对于目前来说应该比较熟悉了啊好,那这样的话呢,我们就得到了一个杰森。OJ with worldmark的一个对吧?啊,有了一个world啊,接下来呢,按照M分组,这一步很简单,点K啊,那直接是一个杰森mid,我们都知道在哪了,在common字段里边,对吧。
01:07
Get object,然后呢,先获取我们的common,然后获取。麦子的,这样的话,我们就得到了一个。监控流。对吧,好,那接下来我们就是做这个核心的过滤这一步了啊,这一步呢,我们说了,首先呢,你肯定要做过滤,有的数据呢,肯定是不需要的,对吧,你得判断两个都等于啊,两个都不等于零。才需要,所以呢,他承担着过滤的作用,同时呢,我们还需要将这个杰森,此时就不要这个杰森了,我要转化这个数据,对吧,你呢,确实是新的一个访客,那我就把它。指为一对吧,如果呢,你确实是一个商品详情页新的访客,那我就把它置为一对吧,所以呢,承担了过滤跟转换两个功能啊,那你可以用Fla map,当然也可以用process啊,也可以用process对吧?好,那我们还是用Fla map,因为简单一点啊,当然你用process也可以,Process的话,它本来就可以做这个。
02:10
状态变程对吧,好,那我们要把这个拿过来啊,叫杰森obj DS,诶不对,叫with mark对吧,用它啊点。嗯,说状态变成,那我们用Fla map,但是呢,由于我们用状态变成必须要用rich Fla map对吧?好,这个转换的数据结构呢,肯定是。Traffic home detail will be啊,肯定是他了,对吧?好,那这里边儿呢,首先我们要定义两个状态。Private value。States。放。Three。啊,我们放这个string对吧,好,那这个呢,我们得到了一个叫home。Last。
03:04
好,那么得到它啊,呃,那另外一个呢,Private是value states里边呢是three。里边是,然后接下来是这个。嗯,咱们叫对吧,商品详情页叫。States啊,最后一次的一个状态啊,好,那open方法里边我们去。初始化,那我们想一下这两个状态。我们要求的是每天的。独立访客那?我们这个状态可不可以设置一个过期时间呢?加想能不能行?可以吧?我们是不是可以设置一个过期时间呢?还是多久?就是你问你想。你状态如果等于钠。
04:00
跟你不等于呢,与我当前时间不相同,结果是不是一样的?按天去重的,这个时候我们是不是都可以设置TTL为一天了。大家记得吗?那你想一下这个需求我能不能设置呢。这个地方的需求我们能不能设置,哎,只保留一天呢,当前这个状态。是不是也可以啊,对吧,好,那既然这样的话,我们呢,这边就不着急去写这个对吧,还有一个叫value states。Description描述器,对吧,Three啊好,那第一个呢,是后。State。String。点class对吧,好看嘉宾得到一个home stay。
05:01
Describe。DS吧,我们就叫DS啊好,那同理咱们应该还有一个对吧,这边呢,还有一个detail,我把这个改成detail。当然你不光不能光改这你这个名字也得改,对吧,两个都是detail,好两个状态描述器有了,但是正常的,如果说我们去呃初始化这个状态,那这一步我们先写好啊home。States,对吧,Home last,然后等于get wrong time。Contact,然后呢,把这个。看进去啊,同理还有一个。Detail。Get get,然后呢,是detail的一个状态描述器啊,但是呃,我们要呢,给他去干什么设置。七条。啊,设置一个TTL对吧,好,那我们就是这个在状态描述器这设置对吧,Enable time to live啊呃,这里面呢,要一个。
06:03
State t conflict,那它俩都是一天的话,那我们就可以直接在这写一个叫另一个state t TL conflict,对吧?好,当然了,它呢是一个私有化勾造方法了。点。对吧,这边呢,我们给一天啊,嗯,它有一个time对吧。Time days给个一天啊,那中间呢,我们可以设置它的一个更新方式啊,更新为on create and right对吧,嗯,创建了更新啊加那这样的话呢,我们就得到了一个叫t conflict,诶那把它呢,放进去对吧,同时把。这里是一个参数嘛,Conflictf对吧,当然可以复用啊,点enable,然后t conflict,哎,这样的话呢,我们两个状态就已经。搞定了。这没问题吧,对吧,只不过说这里边它需要用的两个状态嘛,感觉好像写了很多,其实没有对吧,保留一天,然后呢,让他创建,或者说这个被改了,那我们要就重置它的一个。
07:10
TT啊,其他的就不用管啊,那状态搞定了,接下来呢,按照我们逻辑来写啊,按照我们逻辑来写啊,首先我们肯定要会什么。我们肯定要获取一个状态的时间。以及当前数据的时间日期对吧?好,那获取状态数据以及当前数据中的。日期。对吧,好状态的日期呢,那就后。点。Value啊,这个呢,我们就得到了一个什么叫home last dt。啊,或者当天日期先写也行啊,当前日期呢,就是呃,Date for my YouTube.to date啊那这个TS.get到对吧,然后呢,把这个TS放进来加V啊得到一个呃,Current。
08:05
Date啊current date对吧?啊叫DT啊,那除了这个之外,那咱们还有一个就是detail。当然你可以先写一个啊,另外一个模仿着写也行,我就一块来写了啊,那这个呢叫detail。Last。第七啊,两个值对吧,好,那我们按照这个要求呢,我们要写什么。我们要定义一个。这个访问这个当前首页的一个。人数对吧,定义访问。这个首页啊,数据啊,访问首页或者这个详情页。详列的数据啊,那来一个浪。对吧,叫后count啊,那默认呢还是给零啊,同理对吧,这个detail c count啊,默认呢也是给0L。
09:07
那什么时候要去给这个值呢,对吧,好判断。如果。这个状态为空,或者状态是。时间与当前时间不同啊,则。为需要的数据,否则就是不需要的数据,这个不用写了,对吧?好,那我们来写一下if这个后。Last dt,它呢,等等于no啊,或者它不等于not,不等于not呢?Last dt.equals谁啊,Current dt,但是呢,我们要取反,如果是当然人家不同,对吧,那我就把这个home CT改为。一。我就把它作为一。
10:00
对吧,啊,这为一之后呢,还得更新一下这个状态,那就是后。this.update诶用当前日期去更新一下啊,同理咱们还有一个什么呢,把这个拿过来对吧。往那一放。啊,往这一放,咱们就不能这样了,对吧,这个呢是谁。Detail。对吧,好,那这个是detail与当天时间啊,然后这个呢是detail。值为一。啊,这唯一同时呢,这边更新的是谁啊,更新的是detail的状态啊。嗯,点E,我看一下这块有什么有什么问题啊。如果它等等于呢?或者他俩不等。把这个值为一。控制针。我是哪块写错了。啊,不是不是,这个怎么能那样写,这个应该是它吧,我就说怎么给我飘黄对吧?啊,应该我刚才用的是状态啊,应该是取出来这个值对吧?啊,我就说感觉怪怪的啊啊一下子还懵了啊,刚才我写的是什么,我给大家看一下啊。
11:16
刚才我是用那个状态在这做判断。对吧,那肯定不行啊,我们得用这个值吧啊,取出来这个值才可以啊,对对,改了改错了对吧,还不如自己手头写呢,还不容易出错对吧?好,那就是说只要有一个满足,那就置为一对吧啊,否则那就不要,那接下来呢,我们在这边写。满足任何一个数据不等于。零。走。可以写出对吧,你要两个都是零,不好意思,那这个数据我就不要了,我两个都是零,我最后统计说人数你没有什么意义啊,对吧,你搞两个零出去干嘛呢,没有任何意义,所以呢,就不需要啊,那在这边呢。
12:05
他的if。啊,那其实它这个值要不然是零,要不然是一,不会有其他的对吧?好,那我们就随便判断,你写不等于零就行,你写等等于一也可以,其实啊好,那我判断这个后CT啊,如果等等于EL。或者detail等等于。EL,对吧,哎,那这个呢,都是我们所需要的数据,否则就不需要,不需要的你就不用写了,Else不用写了,对吧,那就out.connect。一个叫。Home detail page will be,对吧?那第一个ST不知道,ET不知道对吧。Home CT有了。Detail CT有了啊,然后时间戳TS对吧,那我们可以用一个系统时间,当然呢,你用这个TS也可以,诶那这块呢,我们稍微的处理一下CTRLC啊。
13:02
拿过来。这样的话我就不用重新获取了,对吧,在这边呢,我也可以写一个TS对吧,到最后呢,你也可以改这个无所谓。好吧,好,那其实就是这样的,这样的话我们就满足了,呃,必须有一个等于一对吧,好,那如果说你两个都等于零,不好意思,这条数据我不要,我写两个零数据干嘛呢。没有什么意义对吧,好,那这块呢,我们就搞定了,这是整个的一个过滤啊,对于这个。诶,这个写错了,这个应该是他啊,我要看这个东西没用啊呃,这是一个监控流来map去调用对吧?好那么在这边呢,我们就看到out加V得到一个什么。叫。Traffic detail death。啊,或者叫CTDS也可以啊好,那这块呢,我们过滤加转换结构就搞定了,大家这块有没有问题。
14:04
其实这里边就无非用到两个状态,但是两个状态写的代码其实是一样的。对吧,啊,你要一个状态可能会更清晰一点,两个状态要混着用,感觉有那么。一点点的。绕对吧,因为他东西多了嘛。这块大家OK吗?OK的,给我扣个一好吧。两个都是零,就是重复的数据吧,对啊,就是你之前这个mid首页也访问过。详情页也访问过对吧,那你就重复数据两个都是零,那就不要嘛,不要的话else就不用写啊。对啊,陈总说的没问题啊,如果两个都是零,那就说明是重复数据,我就不要嘛,我所以没有写L逻辑对吧,这个数据扔了OK了啊好,那这是我们所看到的整个的一个过滤啊,过滤是我们的书。
15:06
接下来呢,是这个开窗聚合这一步,注意啊,你看啊,它呢,已经是一个普通的数据流了,对吧,是一个普通的数据流了,并不是一个监控流啊,你拿它呢,没办法调用这个window了啊,你没办法调用window,你得调用的是,你看我一写window,它出来是WINDOW2,它没有我们之前那个window了,因为它这个data stream开窗。对吧,啊,这个是一个全窗口啊好,那这里边呢,咱们当然还是用这个汤,因为太温,这个无所谓对吧,还是十秒啊呃,但是上面呢,由于我们用过那个time,这边呢,就它写的是一个全类名对吧?好,那接下来点reduce有一个reduce function。啊,同时再有一个叫all window啊,这个呢叫all window function。
16:01
诶它呢,呃叫凹方式,不叫window方向啊,因为你前面是拿window or开窗的嘛,对吧?好,那这里边呢就比较简单,我们最终呢还是返回VALUE61,然后呢,把两个值结合Y61.set后CT对吧,那Y61呢,我们去get。Home加VALUE2点,Get home啊嗯,接下来呢,Value一点。就DUVCT对吧,那就Y一点。Get加value2.get。诶,那这个就搞定,搞定好之后,这里边儿也就简单了,分三步走对吧?嗯,第一步。获取数据。第二。补充字段第三步输出出完了对吧,数据啊,这个你最后你会写烂,我告诉你啊,你会写烂点。
17:01
点。直接next。补充字段啊,那就是page will.set ts,假如TS我们换一个对吧,我们重重置一下system.current minutes啊好,那will.said ST。啊,A date for ma.to年月十分秒,然后呢,这我们写window.get start。再下来还有一个and,对吧。啊,Get end搞定啊,最后呢,输出出去啊,点connect,把这个k will be再给它写出去,哎,值就写完了。对吧,这个就很简单了啊,到这个位置你会发现第二遍写的时候已经很轻松了啊,再到第三遍第四遍,等你写个十遍你就吐了,对吧。
18:02
嘉宾找到一个。伪造。可以吧,啊,咱们就叫结果数据啊,那这边呢,我们就同时把这个写了。Without。I think my括号you.get啊呃,当然这个表我们还没创建,但是没关系啊,我们可以把这个so先写了,叫insert。丁库表明我去拿一下啊,我等会进表肯定用它嘛,对吧,所以呢,我直接拿这个表明啊。往前放啊,看一下几个字段啊,那Y4。括号几个字段呢?打几个问号啊来打这边,嗯,串口两个两个值一个TS5个字段嘛,哎,这个so easy在啊一哎怎么能跳到。最后一个五个啊,不要写错了啊这块。加点。
19:11
往这一放搞定对吧,那这就是我们的分组啊,没有分组啊,就喜欢让喜欢说这个分组开张聚额放在一起,对吧,这块就是我们的开张金额安家数据写到这个科house啊,那接下来呢,咱们把这个做一个测试啊,那我要还是一样的把前面这个数据流整个的拿过来对吧?啊先分析一下。嗯,那。咱们呢?数据流啊,这个我加一个啊这边。加一个这个班级号,嗯,说九流的话,我们是来自于这个配置log。对吧,所以呢,我只需要拿那个谁就行了,D1到d base。把它拿过来加一点东西,因为在这个基础上,我们消费的它产生的数据嘛,对吧,好,那加一个这个。
20:01
Link APP啊,然后呢,到我们的house。啊,这个呢,是咱们的DWS。对吧,O DS DW ddws,哎,这种单线条单线条的就会好一点对吧。呃,当年这个福利APP呢,是他自己啊,之后呢,往克里奥里洗,那当然是克里浩。对吧,只不过说呢,它依赖于这个CK啊,所以咱们稍微的写一下这个CK啊。好,那我们要开的东西呢,就比较简单了,那ZK卡夫卡F1,然后C对吧,再加上两个程序啊,两个程序好那么来啊。点开。ZK。然后呢,是卡卡。
21:07
然后F1对吧。注意我们表还没见啊,我得进去见表啊,嗯,那我们进到这个。见表啊。我们又。叫追梦。这个数据库对吧?好,那我们去签表语句来一下啊。好,那我们新的表有新from。现在呢,当然没有数据没有问题对吧?好,那接下来呢,我们服务端相当于就已经开了F1开了吧,刚才。
22:03
看一眼啊。哎,Application对吧,这是一已经有了啊呃,这边呢,我们切到video module到APP log,诶到这边呢,等着去造这个数据啊。好,那。这边开两个,一个是贝,他得开。他是负责往这个。配置log里边去写数据的对吧。接下来就是我们刚才写的这个程序。好造数据Lg.SH这个日期呢,我就不改了,就是行为数据日期呢,都是5月24号对吧。来看这。Base应该会很快就有数据了是吧?
23:01
哎,他呢,直接就有数据了,因为它也是一样的嘛,对吧,这边呢,来了这么一条三十三十啊。目前来说都一样啊。八十八八十八啊行吧,他应该会有不一样的时候,对吧?啊目前呢,我们造的数据可能没有重复的这种。Mid对吧,没有重复的,都是不重复的mid,因为其实我们的m mid比较多哈,比较多。对吧,所以大家看到他俩呢,都是。一样的啊,都是一样的对吧。那么再造一点数据,我们得看到他俩,他俩是有可能会不一样,对吧,但是其实我们造的数据也比较多,你说访问了首页,然后接下来访问商品详情页,我们造数据呢,就是按照这个流程去造的。啊,其实他俩一样的话也是正常的,说实话啊也是正常的。
24:00
因为你在我这边出现这个情况,如果说你这个数据比较少,你可能会出现什么情况呢?呃,对吧,你把这个mid,因为我这mid很大很大,看见没。我这都是1000万是吧,1000万,所以呢,几乎这个m mid呢,就不重复啊,就很少我们造这么一点几百条数据,1000万里边造几百个对吧,你说出现重复的这种概率呢,就比较低。啊,概率比较低,那既然如果没有重复的话,那我们数据确实啊,对吧,每一条都是我们要的数据,然后呢,他俩是一样的对吧?好我们再造一点试试啊,那这个嗯。Mi较大,而且呢,我们造数据的这个。让他访问的这个。路线,哎,不在这这个啊,应该这个。一般我们的路线呢,就是首页都是从首页进去,对吧,然后呢,都会后面有什么。
25:01
看见没?都会有这个商品详情,也就是说你只要出现了这个首页,那就会出现这个商品详情页对吧?那所以他俩的人数呢是一样的,那这没没毛病啊,这个要注意一下,它两个一样的,没毛病啊,因为我们造数据是这样造的,就是只要你进入首页了,我们所有的路径都按照这个走的,在这里面挑一个对吧,然后呢,生成这个工detail,你看。详情。啊,详情只有这个没有详情对吧,那这种数据呢。也不一定能造的出来,对吧,就是说你很难会碰到这种数据而已啊,就会比较难啊,对吧。看这边啊,这个都一样的,那我们就不去专门造这个数据了,因为我mi给的很大对吧,那其实那就说你把这调小一点,其实调小一点呢,也不好,调小一点的话,你你看到现象就是说,诶刚开始呢,可能七八十,然后呢五六十四五十四五十之后呢,变成一二十,最后两个都是零。
26:03
对吧,就没有数据了,就就是都是零不会出现嘛,对吧,两个呢,就越来越少越来越少。能懂意思吗?因为它全部去除干掉了啊,所以这种现象它俩相等现象呢,我给大家说明一下是正常的,OK吧,是正常的啊。因为你你,但是你要确保一下你这块没有写错,因为这两个如果是一样的话,那有没有可能是你这个地方。条件完全都一样的,也有可能对吧,你把这个条件放到这儿了。两个条件是一样的。那当然他俩。同时为一对吧。好,那这个呢,我们就。
我来说两句