00:00
呃,那还是一样的,把昨天的内容呢,做一个快速的回顾,OK吧,啊,那首先呢,我们昨天上午是将dim层全部都搞定。把这个维表层全部都搞定了,对吧?呃,咱们呢,就差最后一步将数据写到Phoenix啊,那我们写到Phoenix的时候呢,我们发现Phoenix它是拿这个GDBC调用的,所以呢,我们就想着,诶,那这个东西能不能用GDBCS呢,用这个连接器呢,因为官方给我们提供了,我们就用起来就比较简单一些。对吧?啊,那我们就想着我们就带着大家看了一下那个官方文档啊,它的调用方式,首先要传一个circle。然后呢,是给S里边占位符赋值的一个参数。对吧?啊,那么接下来呢,是批量提交的参数,最后一个是连接参数,你到底要连哪个。
01:00
服务对吧,哎,你给我一个驱动。给我一个URL地址,哎,那就够了,对吧?好呃,但是呢,我们发现。他这个JDVC think不太符合当前我们这个使用场景。原因就在于他那这个S语句是先给定的,在你调用之前,相当于你就得把这个S写好。对吧,而我们。现在这个流。他是有。很多张为表的。且各个为表,它的字段呢不一样。对吧,而且字段的个数也不一样,那你要统一的在外面给一个这样的一个S语句,那就给不了了。对吧,就算你用占位符,你也不知道用几个,因为它字段的个数都不确定。对吧,你要是字段不确定,你可以占位符,然后就附上对吧?但是问题在于什么呢?我连个数都不确定,那我写几个问号二我都不知道。
02:06
是不是那这个就不好了。啊,这个就不好了。啊好,那所以我们最后总结。说这个GDBC呀。他更适合的。是。往单表里边写的这种业务场景。对吧,如果说你这个流数据比较单一,未来呢,只写到一个表里边,诶那这个可以。对吧,这个非常可以nice啊,因为你的表是单个的,那你的列肯定是固定的对吧?个数固定的,列名固定的,那我们可以这样去写好好。那我们用不了接力B性,那我们就只能。自定义了。对吧,我们只能自定义啊,自定义think呢,我们肯定要用一个reach think方式,因为我们在这里边是涉及到一个写库操作。对吧,写库操作啊,这样,呃,我们要创建这个连接,在这个生命周期方法里边去创建这个连接,对吧?当然这个时候呢,我们用到了一个连接池,因为在前面我们建表的时候就说了,我们可以在open方法里面直接创建连接,让当前这个并行度只有一个连接,这种可以对吧?啊也可以用一个连接池,让一个并行度呢,用一个连接池,然后呢,不断的去取这个数据。
03:26
对吧?啊,类似这样子的啊,那上面呢,我们建表的时候并没有用连接池,那其实原因很简单啊,呃,第一个呢,想给大家介绍一下这两种方式啊,你都见识一下这种代码怎么写的,对吧?第二个呢,其实你想一下建表这块我们要用到的连接并不多,因为我们配置信息,它就是配置信息要用嘛,就见表对吧,很少很少。啊,那你46张表,就算全部都是为表,那你也只有46条数据。对吧,啊,用的很少,那你用不上,犯不上用一个连接池。
04:03
对吧,而最后呢,我们要将维表数据给他写出去。啊,其实它只有在最开始初始化的时候,可能连接数会多一些,但是到了后面,呃,因为我们所有的维表呢,都是这个属于这种叫什么呢?叫缓慢变化为对吧,他不会那么频繁的去变更这个数据啊,那在这边呢,你如果实在不想用连接池,直接在open里边创建一个连接,对吧,也可以。啊,其实也可以对吧,好,那我们呢,既然用了两种方式,我们都用一下吧,对吧?啊,那我们呢,是斯的一个数据流对吧,但是我们那个流好像叫。DMDS对吧,我当时取的名字叫DMDS啊,然后呢,呃,调用DMC方式啊,这个方式里边呢,有两个核心的方法,一个是open用来初始化连接啊,当然呢,咱们初始化连接池,另外一个呢,Inlo方法。对吧,电报方法调用数据和保存,然后呢,我们在这里边生成这个四个语句,当然呢,我们是写到一个工具类的方法里边的,对吧?啊呃,我的名字呢,叫insert value啊,当然这个方法名呢,随便这个是获取upsett circle对吧?啊,专门来取这个circle语句啊,然后呢,我们写了一个呃,工具类,在里边写了一个insert value的一个方法啊,当然那个工具类呢,你不写,直接写在里边也行,因为那个工具类啊,其实不太能够被复用。
05:29
对吧,因为他的一个呃,专业性太强了,就是说他跟业务挂钩的,就专门的往这个Phoenix里边去写这个数据,对吧?好,这是我们。昨天上午。所聊的一个内容,把数据写出去,最后呢,我们做了一个测试,对吧,那到了下午呢,我们开始聊这个DWD。对吧,我们当时分析了DWG呢,有两种实现方式,第一种。咱们直接。分流。对吧,按照表,按照这个日志数据的类型,按照业务数据的表明,对吧,直接分流把它全部拆开,这是一种,另外一种呢,我不分流,你DWD层本来就还要做数据加工,对吧?啊,因为你有可能在业务表呢,你要做招做这个什么维表退换。
06:18
啊,类似于做这样的事情啊,这个呢,我们后续再聊好好那在这个基础上呢。咱们两种实验方案,第二种呢,就直接过滤我去。消费全量的数据做过滤,对吧,然后取我们要的这个表,你去做招做微表退换,你就做什么事都行对吧,好好那么。我们对于两种方案呢,我们讨论了一下。啊,我们讨论一下第一种方案。直接分流对吧,不管怎么样,我先把所有的数据全部拆开,这种呢,他经会多经过一次卡夫卡。啊,可能诶会有效率上的一个。
07:01
差异。那第二种呢,他每一次都是消费全量数据。然后做过滤,你无论是谁,要任何一张表,消费的都是全量数据。对吧,啊,那在这种情况下呢来说呢,我们消费的数据量如果过大,你也会影响这个效率。所以最终呢,我们两种方案都用了,哎,比如说日志数据,咱们用的是先拆开。对吧,因为日志数据数据量比较大。如果你直接消费全量数据做处理。那还不如说你先经过一次卡夫卡来的效率高呢,虽然我多经过一次卡夫卡对吧,但是呢,你每一次的消费全量,然后做过滤,这个呢不好对吧,而对于业务数据,咱们的数据量呢,很小。所以呢,我们直接消费全量数据做过滤,对吧?啊,我就不落盘,因为数据量小的时候,你再去经过一次卡夫卡,反而效率会变慢。
08:02
啊,所以我们就综合了来看呢,诶经过这个数据数据量的一个讨论,我们决定两种呢都可以用,对吧?啊日志数据数据量大,我们经过一次卡发卡,那业务数据数据量小,我就不经过开发了,我直接消费全量数据做过滤,对吧,这这是有取舍的,这是一个平衡点对吧?哎,根据数据量来的。啊好,那方案定了啊,最后呢,我们就先写的是日志数据,因为它也正好属于这个流量域,对吧,我们先做的第一步事情就是说呢,未经加工的实时表,因为我们说了对于这个DWD层的数据啊,我们可能还需要做一遍加工。对吧,比如说业务数据的join围绕退化,这是我们今天说的啊,那呃,我们日数据呢,也可能要做一些加工,所以呢,未经加工的就是直接的分流。就是做直接分流处理,对吧,这里边呢,我们总共做三件事,第一。1.2过滤对吧,我们是将这种非阶层数据给它放到了测出流并打印啊,我们也看了一下对吧,得体啊那第二。
09:05
修复标记用的状态编程对吧,整个的逻辑啊,大家要清楚啊,你要是呃不太了解,你可以跟我一样,对吧,把那个图呢,把它截出来,然后呢,对着这个图去一步一步的写,当然那里边写的有很多分支,五个分支吧,但实际上我们最后写出来只有三个分支,但因为有两个分支呢,他啥也不干。既然你啥也不干,那。这个分支不要也罢,对吧,是这个意思啊,那最后呢,是这个分流啊,分流呢,就是说你要找到这里边这个关键词,最重要的是你要搞清楚这些个数据之间的。关系。对吧,就像我们说的这个错误。跟启动与页面它是共存。而启动与页面。他俩是互斥。对吧?而页面与动作,还有这个曝光,它们之间呢是包含关系,而它俩之间没有什么关系,对吧?可以存在一块,也可以不存在一块,这个无所谓的,对吧?所以根据这种关系呢,我们就分成了五个流,然后呢,把这个数据对应的写到了五个主题里边,对吧?啊昨天呢,我们也手动做了一个测试,诶把我们想要测的一些结果呢都测了一下,但是呢,还差一步,因为昨天本身就已经拖堂了,对吧?所以最后一步呢,没错,怎么呢,跟前面Mo对接起来,把整体跑一下。
10:36
对吧,把整体跑一下啊,那接下来呢,我们把这个事儿来做一下啊。
我来说两句