00:00
好,那接下来呢,我们。看一下这里边儿的内容,对吧,我们写代码的一个步骤是什么样子的啊,来我们还是打开一个模板,然后呢,我们来运行啊。大家过一下,接下来我们写代码呢,就围绕这个来做啊。好,首先第一步,因为我们涉及到要取上一跳页面。是否为呢,所以呢,我们要消费的是应该是页面日志吧,但是有同学可能在想,那我直接消费这个启动可不可以啊,其实也可以对吧,你直接去呃消费这个启动日志,当然呢,我们既然加了这个业务逻辑说过滤掉上一跳不等于none对吧,我们就消费这个页面日志就好了,对吧?好,那我们呢,首先。消费DWD页面主题的数据啊,我消费它对吧,接下来呢,我们要做什么事。过滤数据吧,上一跳ID不等于那的给它过滤掉。
01:03
啊,给它过滤掉,那是因为咱们呢要取这个。独立访客对吧,这刚才我们所说的啊,因为我们是这样规定的啊,但是有的公司呢,不这样规定,那你其实用这个页面或者用这个启动啊,可能用启动会更好一点,因为启动日志相对于页面日志呢,可能数据量更小一点,对吧,既然我们加了这个有逻辑,你启动日志里边它没有什么,呃,这个东西啊,对吧?好那。继续。啊,那接下来呢,就是做我们的驱虫啊,但是在驱虫之前呢,一定要注意,我们呢,是要对。相同的mid数据做去找对吧,那我们未来保存的这个状态呢,同理也是一个mid一个对吧,所以这当中呢,应该有一步按照m ma分组对吧,啊KBY。按照M分组好,那之后呢,就是我们最核心的这个。驱虫,利用状态去去虫,好,那接下来我们要深入讨论一下这个状态,刚才有同学提到了map state,有同学说的状态,那我们到底要用到什么类型,对吧?我们就想一想我们要存什么数据,对吧?大家现在来思考一下,我们在这个状态当中应该存什么数据呢?
02:13
所以就会决定我们未来。状态的类型该怎么选择对吧。大家想一想,我们这个状态里边应该存什么数据。我们为了求这个。日活现在呢,我们已经按照mid分组了。对吧。然后呢,我们每一个mid,它只有。都有一个独立的一个状态。云总说存这个时间戳。
03:01
呃,陈总说当日首次登录时间也是时间戳是吗?是不是也是时间戳?嗯,其他同学呢,有没有想法再来说一说?啊,其他同学呢,有什么想法,我们应该在这个状态里边存什么内容来以达到我们做去重。存lasts配置ID啊。啊。方总怎么能存last配,这个肯定不可能啊,因为你last配ID一定为none的,因为我们前面把last配置ID不等于none过滤掉了,就是到既然到这一块,它所有的那配D都是none诶。
04:02
你存个这玩意干嘛呀。这个是不是有点不对了。我们注意啊,我们这个驱虫是按天驱虫吧。我们要按天做去重,在一天范围内做驱虫,哎,假如说我是昨天登录了,今天这是第一条。你状态虽然不等于呢。我是不是也要保留啊,对吧,那你不等于呢跟等于呢都有可能要保留,那我要怎么区分,能不能保留这个数据呢。
05:01
云总说,存。Mid吗?林总,你的意思是存mid是吗?其他同学呢?开动脑筋想一想啊,我们应该存什么?存什么东西?M mid和时间啊,又改了是吧,你前面说时间戳现在和时间,那你mid有必要存吗?M mad有必要存吗?你注意啊,这已经按m mad分组了。我还需要存ID吗?大家想。我们要按天去重对吧,按天去重肯定存的是日期啊,对吧,而且是年月日就够了吧,不用存时间充啊,你存时间充反而会麻烦一点。
06:06
对吧,啊,你存时间戳呢,你还麻烦一点,因为你两条数据时间戳不可能相等嘛。对吧。是不是应该存一个日期,存年月日就好了。对吧,而且核心逻辑呢,如果说我来了数据。我状态为空。是不是就保留?对吧,好,那如果状态不等于空呢,我就一定不要吗?也不是,如果说你状态不等于空。但是。你的状态时间跟我当前数据时间不同。我是不是也要保留?想一想啊。我们是不是应该存一个日期呀。成年月日了对吧,我们要按天去同嘛。我们是不是按天去重啊,对吧,存的就是日期啊,你存时间出也行,只不过说麻烦一点吧。
07:02
对吧,啊,所以我们按天去种呢,存的日期就够了,Mid肯定不存了,你你想想我都按mid分组了。你存mi干嘛呀?对吧,你这个状态一定是当前这个m mid。保留当天最早登录的那一条,对呀。然后呢?然后就要存时间戳吗。我保留当天最早登录的那一条。我就存时间戳吗。你想一想啊。你比如说对吧。对啊,保留年月日是不是就够了呀?啊,你比如说早上九点啊,现在MIT相同啊,对吧,早上九点。
08:04
十点。11点。12点。那为啥还要留之后的数据呢?保留一条不就行了?呃,什么意思没懂,我什么时候留了之后的数据,我不是说了保留一条后面数据要过滤掉吗?秦总,你这句话我不懂,我什么时候说了,要保留后面的数据了?我一直说的都是保留第一条。我说要把后面的数据过滤掉,我从来没有说保留后面的数据啊。对吧,我只要九点这一条,这个呢都过滤掉。是不是?都要过滤掉吧,那怎么过滤啊,要用到状态嘛,我们不是这样聊的吗?那那凭什么。过滤掉呢,对吧,这个凭啥保留呢?那因为它的状态为none对吧,这个状态有了,但是你不能根据状态有或者没有来取出数据,因为如果说这个呢,是5月16号,他5月16号有四条数据,对吧,到了5月17号他呢。
09:11
十点。有数据,那你告诉我这个要不要保留。就是大家现在告诉我这个要不要保留,一保留二不保留,就是这一条数据要不要保留,如果说我只有对于mid,同一个mid只有这五条数据。那这个第一条必然保留,这个要不要保留?这个要不要保留?这个必然是要保留的吧,因为它是5月17号的数据,肯定要保留好,那我们想一想,这个状态存什么东西对吧?那刚开始呢,我们想着状态,如果为呢我就保留状态,不等于呢,我就不保留,如果你简单的这样去考虑,这条数据是不是也会被干掉。对吧,因为你这个地方。九点只要来了一条数据,我这个状态呢,它就不适当了,就不保留,所以呢,那我凭什么能把这些东西干掉而保留它呢?我要存的是日期。
10:07
对吧,我存一个年月日,诶那你这个十点11:12点,他的年月日跟我九点的年月日是不是一样的,所以我不保留,所以我就不要对吧,而到了这条数据,我的年月日跟你年月日不一样,我这条数据是不是也可以保留,但同时更新状态了,对吧?把它更新成5月17号。能明白吗?对吧,你按天去重,你肯定要保留一个天的日期啊。对吧,肯定保留到天就行了。对吧,啊,这样我们就保留每天的第一条嘛,对吧,啊好,那所以呢,咱们的流程就出来了。状态记录的是mid的末次登录日期,注意叫末次登录的日期啊,应该是末次登录日期的。
11:00
就是日期吧,对吧,上一次的登录日期啊,就是那一天的第一条数据写进去了对吧?好,那我们看啊,如果墨色登录日期为那。啊为那对吧,或者不是今天。啊,你不等于闹对吧,但是呢,你的保留的状态日期跟我当前这个数据日期不同。那我都保留。这条数据对吧,保留数据啊,因为它是当前MID首次访问的,保留这个数据啊,然后呢,将这个状态呢,做一个更新,更新成当天,否则。过滤掉,不要这个数据。啊,不要这个数据。啊,这样考虑的话,是以数据来的顺序为准,不是以当天最早时间为准,好,那我问你,如果说我现在就严格要求啊,你取严格取第一条,那你告诉我你说的那种保留TS能行吗?
12:08
啊,明总。你光保留一个TS,你能保证。是最早的一条吗?我知道你考虑的乱序情况。对吧,哎,那你考虑考虑乱选吧。啊,怎么加班呢?啊,你保留一个TS就可以了是吗?我告诉你,你根本就实现不了这个功能,你光保留一个TS根本就不可能实现这个功能。你考虑的问题还太少了,我懂你的意思,你考虑了乱序嘛,啊,因为接下来我就要聊这个问题。好,接下来就要聊这个问题。
13:01
对吧,你考虑了乱序,我懂你的意思啊,就是说呢,哎,那呃,比如说他。明总说的,我九点这个零零分零零秒,他来了一条数据,对吧,我们要的这个数据好,他在零一秒的时候也也产生了一条数据,有两条数据,但是呢,零一秒的这个数据先来。这个数据呢,后来啊,它是整个第一天的,呃,今天的第一条,这是第二条,本应该保留9.0秒这个数据,但是呢,我们保留了这条数据,保留了第二条数据。是不是这个意思,林总?你说的是不是这个问题就是连续的两条。对吧,然后呢,出现了这种。乱续情况,我保留的第二条,你你你你本来应该保留第一条,是这意思吧,但是你你告诉我,你保留时间戳就能解决这个问题吗?你仔细想一想啊,你保留时间出来,能不能解决这个问题?解决不了的。根本解决不了,我告诉你。
14:08
我知道你加一个判断什么意思,哎,那我保留时间戳。对吧,嗯,那接下来来数据来数据呢,我取出时间轴,跟这个时间轴比我输出小的。给我输出小的对吧?好,那我问你第一条数据来了,这个时间戳它的状态是闹对吧,它没得比,那你要不要输出呢。那你这条数据输不输出呢?是个问题吧,你有想过吗?啊。你有没有想过这个数据要不要输出呢?因为你不知道啊,你不知道后面有没有时间说比他更小的呀。你输不输出呢,你不知道。对吧,好,那你就不敢输出,你就不输出啊,不输出呢,你这个数第二条数据来了,第二条数据如果比第一条数据时间都要大,那你要输出第一条了。对吧,好,那你第一条数据又没了,因为刚才你没输出,好,那你跟说你你把这个数据保存下来,保存下来之后,就算你第二条数据时间戳来了,大于第一个,那你第一个就一定能输出吗?你能保证第三条数据时间戳比第一条要要大吗?假如第三条数据它比第一条还小的。
15:22
你有没有考虑过?对吧啊,就是说你保存这个时间戳根本就不行,你懂吧,就根本就不行,而为什么我敢用这个日期呢?因为很简单,你看啊,你说的这种情况啊,概率极低极低,为什么好,我就打你这个乱序,你要什么样的乱序啊,注意啊,我们前提有一个过滤条件,我要上一条文档的,也就是说你连续访问了AB。C比如说我第一个是这样子的,对吧,它是A,这条数据好,我又进来了,因为我要上一条文档的,对吧,我又进来这个页面A。
16:05
C。D。对吧,你要的是这两条数据乱序吧,因为这些东西都被干掉了,你想想看。你要的是不是这两条数据之间的乱序啊?很近的乱序才会发生刚才我们所说的那种情况,大家想是不是?对吧,你是连续的一组访问啊,那这两条数据,它访问的间隔时间说实话。应该间隔比较久吧,是不是他俩产生乱序的可能性怎么样,很低?对吧。他俩产生乱序的可能性很低极低。这是第一个,第二个,第二个。咱求的是什么?日活。咱求的是日活。啊。
17:01
日志数据里边的指标日活好,那我就算真的刚才两种情况对吧,ABC啊,这条数据跟AB。DC啊ACD吧。我就算这两条数据真的乱序了,我本应该保留A1,但是呢,我保留了A2。对吧,啊,这个保留A1A2,他俩既然轮断续。他俩是不是应该访问时间挨得很近才有乱序?不可能说你公司乱序程度达到达了一个小时吧?他俩应该很近对吧,而再加上咱求的是什么?日活。咱们求的是日活。对吧,好那一天假如说稍微有一点数据量公司,对吧,TOC的这种公司面向普通客户的,他的日活基本上在百万左右。第一,我们刚才说了,这种情况出现的概率极低,第二,就算真的出现了,我是百万日活。
18:03
对吧,你就这一条数据可能有那么一丁点的误差,甚至都没有误差,就是一个TS的区别,因为我挨的很近,我的设备所有的东西完全都一样,对吧?版本也没换,渠道一样的,所有东西都没换,就common字段都一样。对吧,然后就一个时间戳不一样,就差了这么几毫秒或者几秒钟。那对于你最终求日活有没有影响?啊,对于你最终求日活有没有影响,大家想。啊,你就别说这两个数据只是错位了。我就真的这条数据我给他扔了对吧,丢了这条数据。或者说我重复计算了,我多计算了一次。在求日活这种指标的层面上。你百万日活对吧,你是100万还是999999。
19:04
有没有影响?有没有大家告诉我?对吧,而且这种情况出现的概率极低,刚才我们所说的对吧?啊,但是明总提出了一个想法,我就给大家要解释一下。对吧,啊,他确实考虑到了一个问题,诶,嗯,要考虑这个乱序啊,但是呢,他可能没想那么多啊,因为我。这些东西都已经想过了。对吧?啊,所以他提出来,本来我就是要说这个事儿的啊,我会在后面去说这个事儿啊,为什么我们敢存日期对吧?啊,那是因为第一像闵总所说,这种情况概率极低极低对吧,第二,真的出现了。也无关痛痒。对吧?啊,我只要保证一天mid只有一个就够了啊,至于说连续的多次访问,我真的保留了第一条还是第二条,其实区别不大,对不对?就是我挨的很近的访问的数据,我保留第一条还是第二条,区别大吗?大家想。
20:02
怎么现在没有声音了?没弹幕了啊。你想想看会有什么影响吗?没什么影响吧?对吧,啊,根本就没有什么影响啊,所以呃,这块呢,你既然闵总提出来了,我就解释一下,当然他不提我也要说这个事儿,对吧,但是呢,他在中间穿插了问的问题,那我就先看他讲一下啊,因为这后面还有一个点,但后面点呢,你先不用管啊,你先不用管,因为这个知识点呢,大家还没有学。啊,就是你在fli学习fli的时候,这个操作还没学,这个API没讲,所以呢,后面我们再给大家补充啊好,那这边已经去动完之后呢,我们就可以写到。开发主题里边了,OK吧,这是我们整体的一个思路啊,其实就是在这一步,就是这个。就这对吧啊好,这是我们所看到一个点啊,当然呢,我们可以把这个抠个图,等会呢就按照这个来写,下面这个你先不用管啊,下面的东西你就先不用管啊,最后呢,我们给它扩展就行了,OK了。
我来说两句