00:00
好,那接下来呢,我们来看第二个需求,诶,它也是属于这个流量域的,那我们之前就说过了,对于DW小呢,你刚拆的表而言,你很有可能还需要再做一些加工啊,才方便后续去。使用对吧,才才能够给后面更好的去使用啊,它是这样的一个意思。呃,那第二个呢,我们做一个什么呢?做一个独立访客,其实就是一个UV。对吧,为了未来的UV需求做准备啊,比如说我们未来呢,要取个东西叫每日每天的日活。对吧,那这里边儿我们最终肯定求一个count的值,对吧,但是求count之前。我们先要做什么事,大家告诉我。就是日活,那肯定就是抗的对吧?啊,看你活跃的人数啊,那在。我们做这个count之前,我们要怎么处理?
01:11
去虫。对了,最核心的我们要去重,在一天范围内对这个mid做去重啊,要先获取数据对吧?啊,那你说的也没毛病啊,想总要先获取数据啊,第一步先获取数据啊,然后呢,嗯,你没有数据你肯定就做不了这个抗,对吧?啊,所以你这样说也没毛病啊,但是最核心的其实应该像林总所说的,我们要做驱虫。对吧,要对数,数据按照天在一天范围内。对mid做一个驱虫。对吧,好,呃,那。未来呢,可能我们要求很多种不同的一个。日火。
02:01
对吧,啊,那假如说我们要求各种各样的日活,就是说我要按照这个,呃,正常按天按小时对吧,或者说按这个渠道。版本。啊,手机屏幕宽高对吧,分各种不同的一个。力度去求这个。日活它都有可能对吧,那我如果说做这么多也就DWS呢,可能我们关于日活的表啊,可能会有这个多张。啊,可能会有多张对吧?啊,因为你出去规划的时候,你在想着,那我是不是可能会根据不同的角度去求这个日活呢,对吧,那我是不是应该把所有的。维度都放在一张表里边,求一个最细力度的呢,那这个也也有时候也不好,因为我们力度越细。它好处是什么?好处就是你包含的维度越多,你未来呢,能得到的结果就会越多。但是你单表数据量。
03:01
就会大。对吧,你单个表的数据量会大,因为你的力度很细嘛,假如说我是ABC3个维度跟A一个维度聚合同一个count新,那肯定A这个数据量要少很多,对吧,它更具有。这个代表性就是我就未来就求A对吧,啊,那就这个意思,所以呢,未来有可能我们把这个呃,不同的维度组合呀,按照我们所需要的情况,我们要分多张表。来做这个事情对吧,就是我们说的,嗯,你有原子指标日活对吧?啊,原子指标求这个什么m mid的count对吧?好那呃,最终你可能要加上这个力度,因为你要做这个派生指标对吧,加上这个力度啊,那些不同的力度,好那就是这里方有一个什么点呢。如果说我要未来根据不同的力度去求这个日活,是不是每一个计算都要做这个去重啊?大家想,但凡你求这个日活,你是不是都要做驱虫,有没有毛病?
04:05
对吧,只要。我做日火,我是不是都要去虫?那。我是不是可以把这个驱虫的工作给他干什么?还是摘出来对吧?啊,但是由于去重以后呢,我不做聚合,所以呢它还是明细,只不过说呢,跟原始数据相比,数据量变少了,因为每天呢,对于同一个mid我只保留第一条数据。后续再来我就不要了,对吧,但是呢,它数据并不做聚合,它只是说把有些数据过滤掉了而已,所以呢,它还属于这个明细。大家想是不是?对吧,比如说你mid第一次访问的,诶有m mid是这个,呃,22年5月17号09:23,那我这条数据保留,那你同样的你这个m mid在这个10:53访问了,那不好意思,这条数据我给他过滤掉,但是第一条数据就是09:23,这条数据我是原封不动的。
05:01
写出去的。对吧,那它还是明细,所以呢,像这个去除工作以后,这个数据呢,我们还是给他放到DWD层。因为它属还属于迷信。能明白吗?对吧,啊,这是一个逻辑啊,所以呢,我们接下来要聊的就是这个独立访客啊,刚才我们说的是我们为什么有这个需求,对吧?第一可能未来呢,这张表要被复用。对吧,啊,那你被复用,你DWS也可以被复用啊,对吧?为什么放DWD,那是因为我们去除工作只是过滤掉一些数据。不对数据做聚合,不做任何其他的操作,只是过滤掉一些,所以它保留的数据。还是原来数据本身。还是那个明细。对吧,所以我们还是放到了DWD层啊,这是需求来源,包括下面一个啊。跳出明细也一样的,他还是明细对吧,这个到时候我们就不多多介绍了,到时候直接就聊这个需求分析对吧,就聊这个需求分析啊,这样的一个情况OK吧,好,这是我们。
06:10
说干了它的一个。来源啊,那接下来我们看一下这个需求分析啊。需求分析对吧,呃,那他呢,其实。比较简单,因为刚才大家都知道了要做这个驱虫啊,那我问大家这个驱虫。我应该怎么做,我应该用flink里边的什么知识点来做这个驱虫啊,就是我只要每天的第一条。然后二月5月17号第一条已经到了后续。再访问这个数据,过滤掉我要用到flink当中什么知识点。来实现这个驱虫的功能。
07:06
要用到。Map state啊,方总说map啊,陈总说状态。好呃,当然他俩总结起来呢,要用状态,那状态的具体的。用哪个类型,咱们是不是还得再讨论呢,对吧,起码用状态,因为。这个就涉及到状态到到底是个什么东西,对吧?大家来跟我聊一聊,你们是怎么去理解状态这个东西的。嗯,你是怎么理解状态这个东西的。对吧,你是怎么看待这个状态,以及你觉得什么时候要用到这个状态。嗯。
08:00
对了,这个状态呢,实际上就是什么历史数据。对吧,好,那我们什么时候要用到状态呢,你就看。本来我们弗林呢是这样子的,就是它是基于事件触发的一个流式处理框架,对吧,就是我来一条计算一条,来一条计算一条没有问题。但是有一些需求。你来一条计算,你计算不了。你比如说现在这个驱虫。对吧,我就计算不了,为什么很明显。你呢?来了数据之后,你没办法处理这条数据,你要看什么,你要看前面它有没有数据来。如果说前面已经有数据了。那。我这条数据就不要。那反之,如果前面没有数据。对吧,那我就要简单一点说啊,这样对吧,啊,当然前面有数据可能是昨天的,那你也得要,对吧,我们简单一点说,有没有数据而言。
09:05
对吧,那这个也就是说我们在处理数据的时候,有时候需要用到历史数据来帮助我们处理当前这套数据,那这个时候你就不用想了,要用状态。对吧,本来如果说来一条数据我就能处理了。那我就不用状态,如果说我处理不了,并且我需要。以前的数据来帮我们。处理辅助处理当前数据,那我们就要用到状态,对吧,我们就要用到这个状态。啊,是这个意思对吧,所以呢,大家理解了,历史数据没有问题对吧?状态其实就是用来存历史数据的。对吧,可以是历史数据的明细,也可以是历史数据的一个聚合值,因为状态里边。有好多种类型吧,啊map list value,然后呢,这个。
10:00
Videos aggregate聚合的对吧?啊,那我可以是聚合一个结果,也可以是这个数据的明细啊,也可以是多条数据,因为它里面有map,有list对吧,这样的内容也可以是单个值的明细,对吧?Value state啊好,这个地方呢,我们要用到状态啊,那没有错。呃,那之后呢,咱们要做这个事情。是什么呢?在这里边我们还有一个点要做,因为我们知道在我们访问一个数据的时候啊。比如说我找一个页面。这个。对吧,呃,他呢,有上一跳。对吧,那这个说明什么问题呢?它是连续的。几次访问对吧,我呢进入平台以后,诶从首页进来的,然后呢,我访问了B,访问了C,诶访问了D,最后呢出去了。可能是这样的一套的对吧,所以呢,对于B而言,它的上一跳呢,应该是A上一个页面对吧,有上一跳好,那我们要求的日活呢,所以我们有一个规定啊,这个呢,呃,有的公司当中它会这样规定,有的公司没有这个规定,当然有这个规定呢,它就会业务逻辑稍微多一点啊,稍微复杂一点,那我们就加上这个什么规定呢?那你看啊,比如说它会产生这种情况。
11:22
我呢,A。到B。到C。对吧,呃,那这个呢,是五月。16号。晚上23点对吧,59分。59秒访问的。这条数据呢,是5月17号。零点。零分零一秒进到这个页面了。对吧,我们要求日活,那就涉及到这个C这个问题了。啊,就涉及到C这条数据的问题,有的公司呢,认为这个C啊,诶它确实是5月17号访问的,对吧,而且它是5月17号的第一条。
12:06
他一定是这个m mid对吧,比方说这个m mid11啊,他一定是这个m mid在5月17号访问的第一条对吧?好,那有的顾客呢,呃,觉得应该保留5月17号M11已经访问了,对吧,但是有的公司呢,在定这个需求的时候,他就认为你这个。看上去是5月17号登录到这个平台产生日志呢,也是5月17号,对吧,这个时间也是5月17号,没有问题,但是呢。你是属于5月16号就进到页面一直没出去访问的啊,有的公司呢,就认为这个不算。认为这个东西它不算。对吧,我要的是什么呢?我要的是你5月17号实打实从头开始访问的,诶你17号进来的,对吧,就是说这个数据呢,没有上一跳,比如说我从C又退出去了,对吧,我在零点。零一分啊,零三秒的时候,我又重新访问了一次A。
13:02
C。D对吧,哎,可能从A跳转到C,再跳转到D,有可能这样吧,啊不是说非得按照这个节奏走吧,对吧,好,那我就认为呢,这个数据是我要的日活的数据。对吧,这个是公司的需求,而我们当前呢,就采用这种。啊,采用这种,那就多加一个条件什么呢,上一跳呢。我们多加一个上一跳为nu对吧?所以呢,在我们做这个数据去重之前,我们先过滤掉不等于nu的数据,减少计算的数据量。OK吧,啊,我们要多做一件事情。对吧,是这样子。当然,两种情况未来在公司当中都有可能会出现。啊,都有可能会出现,OK,这是我们做的一个需求分析,也就是说我们重要的做的这个事情啊,接下来我们看一下整体的思路啊,后面呢,我们就扣定了啊。
我来说两句