00:00
好,那咱们的第二个需求呢,DWS的第二个需求是做这个架构窗口的一个。宽表啊,那这里边呢,我们主要去读取用户的架构数据明细,也就是我们DWD层的那个主题,然后呢,将各窗口的加购独立用户数写到克house,然后我们分析一下这个需求要加购的独立用户,那我们知道。同一个用户呢,在一天当中他可以进行多次加购,那明显我们未来呢,是要出这种按天的需求啊,所以呢,虽然我们开窗是十秒啊,但是最终我们统计呢,是按天进行统计的,也就是说。我们这里边儿很明显有一个。按照。天。同时按照用户ID做一个。去虫。对不对啊,所以这个需求呢,我们直接消费这个加购数据,消费完加购数据以后,接下来我们正常的去转换数据为接对象,因为这样方便我们后续的处理啊,那再往后呢,我们就。
01:13
设置水位线,因为最终呢,我们要去开窗嘛,然后更重要的按照用户ID做一个。分组,分组之后呢,我们就过滤,过滤呢,我们是按天做过滤,那就很简单,呃,首先第一个如我们使用状态编程来做这件事情,对不对啊,因为我们前面呢,按照ID分组了,呃,那么这个时候。我们想一下这个状态变成应该怎么写啊,呃,既然我们要做这个过滤对不对,那我们在状态第一个状态表示这个用户在今天有没有访问过啊呃,那有两种情况,第一状态如果等于那。那说明这个用户呢,之前都没有来过。对吧,那我们就直接保留,也就是说写一个一出去用户呢为一,呃,那如果它的状态不等于那呢。
02:00
那说明这个用户今天就一定来过了吗?也不是,我们还要判断这个状态数据跟我们当前的日期是否相等啊,如果不等呢,那有没有可能是昨天下订单的,今天这个用户呢,是第一次,所以呢,还有一个点,哎,那如果等于呢,或者不等于当天,也就是说你不等于闹的时候,那不等于当天都要保留,否则那都丢弃,否则的面试什么就是不等于闹,并且跟今天日期是相同的,那我们就把这个数据丢弃掉就好了,呃,之后呢,开装聚合就简单了。对吧?啊,那我们要做的是减量,这是一个图解,当然了,我们可以把这个来稍微大家看一下啊。呃,在这里边稍等。诶,我点错了啊,稍等一下我们播放一下。啊,首先第一个消费这个DW层加构数据对吧,然后转化为建对象,提取我们的时间戳,生成我们的word啊,那这个呢,按照UID进行分组啊,那分组之后呢,我们要做驱重,那这里面呢,我们有一个状态就叫last cut,那这个用string类型的一个呃,Value类型的状态就可以了,里边类型呢用的string,那如果等等于那啊或者它与今天不同,那这个数据呢,我们都要保留啊,那否则我们数据是丢弃。
03:28
啊,如果满足这个条件,保留数据并更新到状态里边啊好,那这个呢,我们就过滤出独立的架构用户之后我们就可以。进行一个处理之后呢,开窗去和将数据写到click house,跟之前我们上一个需求就完全一样了,对吧?好,那这个代码呢,我们就快带着大家把这个来拿过来啊,这边语句呢还是一样的,我们等会做测试的时候,我们统一的这弄一下,呃,那第一个我们的招聘最后呢,写出去的这个招聘我们得拿一下,在并目录底下我们迎来了又来一个招聘,对吧。
04:02
好,这个代码呢,我们就直接拿过来。啊,大家来把我们核心的代码呢也拿过来主程序啊呃,我现在拿过来,然后呢,我们一起来看一下,因为这个代码相对来说比较简单啊,就不带着去写了啊呃,下一个需求呢,是很复杂的一个需求,我会带着大家去写一下啊,所以这个需求呢,我们就暂时不带着写了,那我把整个拿过来大家看一下啊。带大家快速过一下,哎,这里边有一些东西呢,我们可能需要去呃,处理一下。因为有些包名啊,取的可能不太一样对吧,那没关系啊,我们把这个处理一下,你看这个是都是包名啊呃,那首先第一个这个边度呢,我们调整为一就够了,然后这块呢,为了方便测试啊,我们还是把它注释掉。啊,但是在生产环境当中,大家注意这个东西要保留,因为它是可以做我们的checkpoint对吧?呃,麦卡U导一下这个包。
05:03
这个叫get consumer啊呃,那往下这个data YouTube把这个依赖导一下to data。然后我们的招聘啊,刚到的这个clearhouse YouTube,我们直接写的对吧,好,那这块呢,最终把这个数据写出去,这块就呃可以搞定了,I think对吧。好,这是我们代码,呃,那调整完之后呢,我们带着大家看一下,首先第一步还是获取我们的执行环境,没什么好说的,第二步消费我们的。DW层加构的这个。主题数据转换数据为接对象之后呢,提取时间戳生成wordmark,按照用户ID分组啊,提取我们中间的UID,接下来呢,到我们核心的。过滤啊,那你看我们呢,既然是一个过滤,我们用的是process,因为里边要有编程用filter啊,那你得用这个。Filter,而且呢,我们同时还要转换数据结构啊呃,那我们来看一下,首先定义一个状态,然后呢,定义个状态。
06:08
到了个助理,诶,我们取了一个名字对吧?啊,用value类型就行了,从运行时上下文当中获取我们的状态,接下来在处理的过程当中,我们来看一下,首先第一个。获取状态数据啊呃,那接下来。诶,把我们数据里边的时间给他拿到啊,然后判断,如果状态等你,那或者状态日期跟我们当前的日期不同,那我们就输出,否则就不做,那本来有个else分支,那我们就不写了,什么都不做了,对吧?呃,开窗十秒啊之后呢,在这边我们用的是一个A的一个方式啊,对我们数据做一个累加,就来一条数据累加一条啊好,那之后呢,Window方式方便我们提取ST窗口时间,因为最终我们写了是要有这个窗口时间的,那我们写到op我们的课列号当中啊,我们的代码呢,就比较简单,这第一个呢,需求是一样的啊,那这是我们代码的一个讲解啊。
我来说两句