00:00
好,首先呢,我们还是把昨天的内容做一个快速的回顾啊呃,昨天呢,上午咱们是花一点时间讲了一下这个。Click house,最终把数据写到click house这个工具类。对吧,啊,那这个工具类呢,咱们写的稍微复杂一点啊,因为用到了这个反射用到了。注解,而且是自定义注解对吧?啊,但是呢,整体思路你梳理一下应该也还好。对吧,啊,整体思路呢,你去好好的梳理一下啊,你想嗯,咱们数据要写出去。然后呢,我们是一个招聘,然后呢,我们定义的是一个泛型,因为未来。接下来所有的需求都会用到这个工类,那都要把数据放到DWS嘛,所以都会用到这个工具类啊,那我们肯定要定义成泛型,那定义成泛型的时候呢,我们把能写的都写一写,对吧,不能写的呢,把它传出去,比如说第一个参数circle。
01:01
我们必须要从外面传进来,里边没法写,因为你有11张表,每个人的S克都不一样,对吧?第二个需求呢,是给这个S里边占位符进行赋值。对吧,第三个是。批量提交参数,第四个是连接参数,这两个呢倒还好,我们就可以快速的直接可以搞定对吧?啊关键就在于第二个。参数第二参数呢,是给这个战略符赋值。那就涉及到了,由于我们用的是这个泛型对吧,泛型对象呢,它它可没有这个什么get赛的方法,你获取这个值不太方便啊呃,那第二个点呢,就在于。我们。这个circle大家都不一样,那里面的问号个数也会不一样。对吧,啊,Y个数也会不一样,所以呢,我们就想着,那我们就对这个扎vain。对象进行什么便利?取出它的值,给这个占位赋值,那最后呢,我们在写S的时候,我们就要求大家写的那个字段,哎,插入S字段的顺序与扎并字段顺序保持一致。
02:09
对吧,我们有一个这样的一个要求在里边。好,嗯,那基于这种情况呢,我们就想到了反射,对吧,通过反射的方式呢,我们是可以获取到。一个对象当中所有的属性及值。全部都可以获取到。对吧,啊呃,获取到以后呢,我们就可以按照位置呢,给它放到我们的。站位符里边最后呢,去执行就好了,那这个过程当中呢,我们又扩展了一下,假如说在我们招聘里边有这种属于是辅助字段的内容。就是说他呢,我们。并不最终不需要这个字段,但是他在我们正常的分组开窗聚合过程当中,它需要辅助我们。去完成其他的字段的聚合。啊,完成其他字段的聚合。
03:02
是这个意思对吧,所以呢,像这种字段呢,假如说我们要有,那肯定不能写出到这个house里边,肯定不会写到里边。对吧,啊,所以呢,我们在这基础上呢,如果说你现在工具类不改啊,当然我们第一次写完的时候不改,那你的。问号的个数是四个。你招聘呢,是五个字段,那就会出问题。对吧,所以我们就需要把这个。不需要的字段呢,给他不写出去。啊,那我们就想到了注解啊,用注解的方式对吧,横向扩展这个功能,如果我们在不要的字段上面加一个注解。然后呢,我们在写出的时候就获取尝试获取这个注解,如果他有了。如果他有了这个注解,那么我们就这个字段就不要了,直接跳过对吧?啊,直接就跳过就好了。啊。好,呃,那这是我们。所说的这个点啊,就是最终呢,我们把数据写出去,最后我们做一个测试,对吧?啊这就搞定了,呃,第二个需求呢,就是用data STEM来实现的,第一个需求呢,用的是Li circle啊这个需求它的一个特点在于什么呢?它是由多个流形成的一个最终结果。
04:19
对吧。那我们涉及到有这个paylo主题可以获取我们的PV。During some总访问时长对吧,以及会话术。啊,那这个从配置当中,我们可以取这个上一项页面是否应当。对吧。好,呃,那第二个我们还要求这个UV。求这个UVUV呢直接来自于我们UV那个主题对吧,还有一个U界,那它呢,也是来自于专门的U界的主题啊,那这就涉及到我们有三个主题,那我必然会涉及到三个流,但最终呢,我们肯定只要一行数据结果这样子你得你得把三个流的数据合并到一起。
05:00
那这里面有两种方式,第一种呢是join,第二种呢是UN,那我们如果用join的话,一定要注意,因为这三个数据,那很有可能。它是独立的对吧,或者说起码你的。登录就是UV这个数据对吧?啊UV这个数据呢。它是有的。那他一定有的,你得拿UV数据去left join我们的。PV数据,Level join,我们的U界数据,对吧?你要用join,起码得用level join,你不能用in join,那不行,对吧?那有可能就是这张表有其他表没有这个数据,你肯定得用一个外连接,起码得是左外,对吧?最好是用全外,那这个就麻烦了,因为我们说了这个需求呢,我们准备用data stream去做,那data stream你要写全外连接,那很麻烦,不是不能做,能做那很麻烦,对吧?啊,所以我们想着还有另外一种方式呢,叫UN。对吧,我们可以用union union以后呢,我们再按照前面的字段做一个聚合啊,因为union的时候呢。
06:03
它这个流里边不涉及到的字段,我们都补的是零。对吧,我们都直接补的是零,所以呢,完全可以。再做一个聚合,那我加零跟没加没什么区别对吧,但是零得有啊,那union的时候呢,呃,它这个特点是它可以同时有多张表多个流对吧,但是呢,它要求你多个流的数据类型是一样的。啊,数据类型是一样的,对吧,这样最后呢才好统一处理,那我们就在前面呢,写了一个扎,并把三个流的统一数据格式之后呢,Unit unit好之后呢分呃这个提取事件时间生成ma,然后就是分组开窗聚合,在聚合的时候呢,我们又给它扩展了一点点东西,对吧,以前大家可能没用过这样的一个方法。啊,就是在radio或者说agg g调用的时候呢,我们里边传两个方式,一个呢video方式,一个window function式,对吧,因为它俩本来正常来说是分开用的啊,你调用reduce传reduce function,你调用apply传的是window function。
07:12
对吧,啊,那也就说这个process也是温方,你将process它可不叫温方向,它叫什么呢?它叫process温方向,这个不一样,对吧,它是一个process function啊好,那在这个里边呢,咱们用了value function对吧,它是单独的这个增量聚合,就是来一条聚合一条优势在于。我效率会很高,因为当我要关窗出结果的时候,由于我是来一条聚合一条,来一条聚合一条,那直接结果输出就好了。对吧,那第二个由于你是来一条聚合一条,所以你需要的存储空间也会更少。对吧,我都聚合成一条数据了,那肯定存储空间会小很多啊好,那第二类呢,是温度方式,它呢是属于这个叫全量聚合窗口聚合的一个计算函数,对吧?好嗯,它的特点是它把这个数据呢,你来一条我收集一条,来一条收集一条,但是我不做计算。
08:11
啊,最终你准备关窗要出结果了,这个时候呢,我会触发一次计算对吧?啊,然后呢,把这个叠加器里面数据取出来,全部呢做一个处理。啊,用这种方式对吧,它的效率肯定会受到一定的影响,因为我video的方式这种它是来一条聚合一条,我要结果的时候直接拿输出就好了,而这个window方式呢,我准备输出结果了。但是呢,你还这个时候才出发计算,那肯定会效率低一点。第二个在于。他呢?是把数据放到集合里边,那需要的存储空间肯定会更大一些。对吧,它所需要的存储空间也会更大一些,OK吧,啊,他这样的一个情况,那它的优势在于呢,由于我们把所有的数据都放在这儿了,那我们要求百分比。
09:00
前百分比的数据对吧,我要求前10%。那这个有好处啊,对吧,他可以求你的reduce增量去就求不了,因为你一个窗口里面100条数据,那你就要十条1000条,你要100条10%的话,对吧?好,那我用reduce方式,我到底保留几条呢?我不知道,因为我也我来一条聚合一条,我怎么知道未来这个窗口里边会来多少条数据呢。对吧,这是它的一个优势啊,这是第一个,第二个优势呢,通过我们调用这个参数的时候发现。调用这个函数啊,我们发现它所给的参数啊不一样,像re的方式呢,它只有一个Y61Y62。对吧,而我们的温度方式,它可不止这个,什么Y61 Y62。啊,它呢,还有这个首先。它有整个迭代器对吧?啊,一个迭代器里边放的所有的数据,更重要的在于它里边有一个什么。Window。
10:00
啊,它里边有一个window,这个是非常重要的,非常关键的。叫window。对吧,窗口啊,那他可以拿到这个窗口信息,对吧,所以呢,我们就对比这两个优缺点,那最后呢,我发现好像我们这个需求只能用window function,因为你radio function呢,虽然效率高,但是我很明显要补充这个窗口信息,你没办法帮我完成这个功能,那不行。你功能不全对吧,不好啊,虽然我温方式呢效率低一点,但是呢,我能保证你完成工作对吧,那你肯定是先写需求写完了。然后再考虑优化吧,对吧,你不能上来考虑优化,你这个需求都做不完。啊,说优化酶的优化对吧?啊,那当时我们想到了只能用这个温的方式啊,但实际上呢,它可以两者结合起来对吧,就正常的你来一条聚合一条,来一条聚合一条。啊,那之后。
11:00
可以干什么事?经过一次window方式,我们去补充这个信息。对吧,啊,这就是昨天我们所聊的主要的一些内容啊好。
我来说两句