00:00
好,那我们先跳过这一节啊,第8.1呢,先不考虑啊,先不用看,然后接下来呢,我们直接跳到我们写代码啊,中间呢,遇到那个问题我们再跳回去,因为我们说了,按照出书的标准呢,我们先做准备工作,对吧,但这个准备工作呢,现在我们还不太能理解啊,等会儿我们再聊啊,那我们来看一下我们这个主要任务对吧,我们再总结一下我们要做的事情,第一。对吧,呃,对麦克抓取的数据。进行1.2有一段数据保留,没用的过滤掉啊,没用的过滤掉,那呃,有的人说这个没用的是不是指的是我们刚才所提到的。对吧,刚才所提到的啊,并不是并不是因为我们想啊,呃,那当前呢,是一个实时数仓,对吧,对于我们的。事实表而言。我们是不是只要新增数据就够了,或者说是最近变化的数据。
01:03
对吧,我只要新增或者最近变化的数据就OK了,对不对。对吧,但是维表数据呢,大家想。为表数据呢?咱们是不是应该将维表数据整个的都导进来?对吧,你事实数据无所谓,你呢,什么时候开始有的事实数仓,你就从这个时候开始计算就好了,但是为表数据,咱们是不是应该保留所有的有没有毛病。咱们的维表数据是不是应该保留所有的?对吗?
02:00
没没毛病吧,把这所有的好,那我们使用Maxwell去抓取这个数据,咱们是不是有puttop的功能,就是说把这个。已经存在的数据给他抓取到啊mal呢有两个功能对吧,第一它可以干什么事啊。获取我们。新增及变化修改的数据啊,你实时的获取到,另外它还有一个boot的功能,就是说初始化我们买S当中已经存在的数据对不对。没毛病吧,好,但是大我不知道大家还记不记得他在做这个。初始化功能的时候。它除了读取我们的数据,它是不是还有两条额外的数据啊。他是不是还有两条额外的数据啊。
03:04
对,两条脏数据啊,一条。叫put的start。对吧,开始和结束,哎,没毛病,其实这一步呢,这个数据我们是不是应该过滤掉啊。我们是不是应该给它过滤掉?对吧,啊,应该给它过滤掉,还有。还有一个问题。就是。如果说。他是那个。删除数据呢?如果是删除数据呢?我们要不要过这张呢?对吧,就是假如说为表发生了一个删除操作。
04:01
我们要不要呢?大家想。啊。想一下。删除数据我们要不要呢,对吧,因为维表数据。它未来呢,首先有初始化的。不用管,无所谓。啊,那你。删除了,如果说你把它过滤掉,那未来你这个my circle跟Phoenix数据不就不一致了吗?也没有问题吗?
05:05
你本来是十条。你本来是十条对吧,MYSO10条,菲HOIX10条,我把买S删了,删了之后你把它过滤掉,你不要。那你买S是九条,Phoenix是十条,这样没有问题吗?因为你们的答案是不要嘛。对吧,因为我知道新增级变化数据肯定要这个不用问对吧,那其他的还有什么类型的,我们有很多类型啊,初始化有初始化类型对吧,有初始化start,有初始化complete完成。对吧,呃,然后呢,有delete它的一个类型,Have对吧?啊有这些个类型,那我们这些数据。到底哪些要哪些不要呢?所以没用的过滤掉,那我们删除数据到底要不要呢?对吧,大家说的是不要。然后呢,我提出来了,你要是不要。
06:02
你就会导致MYSO9条,PHOENIX10条。这个有没有问题呢?哎,对了,方总答到点子上了啊,就是说删除数据完全可以不要。啊,那比如说啊,方总说什么意思呢,现在我呢,本来有12345。啊,买三个里边12345,我是不是初始化同步过来,我的Phoenix也是12345啊没有问题吧,好接下来呢,我把这个五删了。五删了对吧,它是一个编译的数据,但是呢,我们大家选择的是这条数据就不要,我确实就不要,不要的话导致一个问题,这边呢是四条,这边是五条,就是这是买烧。
07:01
对吧,这是Phoenix。这是peni斯,这边是四条,这边是五条,它数据不一致,但是对于我们分析会不会有影响呢?它不会,为什么,因为你看啊,在MYSO里边,它没有了第五条数据。那么接下来我们事实表。我们的事实表。啊,咱们的事实表里边儿会不会产生一个关于五这个维度的数据啊。会不会产生?大家告诉我。一是会,二是不会,对一是确定,二是否定,以后咱们就这样OK吧,啊不用打那个字,打那么多了就扣一二,这样方式比较简单一点。对吧,我们想,那我未来事实表里边儿还会不会产生五这个维度的数据啊。还会不会产生?
08:03
就是买四个里边都没有了五这个维度了。那未来显然它不会产生吧,好,它根本就不会产生,好既然你不会产生,那么我这个五放在这儿有没有问题?好,你还是喜欢打字是吧,那那你打字呗,无所谓啊。啊,只是说打字可能会比较麻烦一点啊,就扣一二会简单一点啊,就是让大家少打点字啊好,你喜欢打字的就无所谓啊,你站长打字也也也无所谓对吧,那。你事实表里边儿不会产生。五那这个五未来是不是就不会有人访问,那这两个数据不一致,最终的结果就是菲尼克斯里边多存了这么几条数据呗,一条呗,对吧,不会对我们业务有任何的影响,那就无所谓了,所以删除数据呢,可以不要。
09:00
对吧,删除数据可以不要。OK吧,所以呢,这个地方讲的没用的过滤掉,不是说对于表层的过滤,而是对于类型,这个地方是对于类型的过滤,而表的过滤呢,是在这儿。对吧,啊表的过滤,那这边我们说了,由于Maxwell将全部的数据写到一个topic,哎,不利于后续的数据处理,我们需要将各个维度拆开。对吧,啊,要放放到这个里边,那么我们。你看啊,如不适合写在配置文件里边,因为这样的话,业务随着需求变化,每增加一张维度表就要修改并重启,对吧?这个还是说直接就到配置文件了,那我们最早的方案是写死到代码里边,对吧?诶,那更不好了,那我们需需要一种动态的配置方案对吧?长期保存,那呃,这两种我们讨论了。放在买搜狗周期性同步对吧,定时任务,第二个呢,买搜狗存储,然后呢。
10:02
使用广播流其实还有一种方式,这种方式呢,其实不太好用啊,放在ZK里边,用ZK的一个通知机制来告诉我们程序它发生改变,对吧,这也是一种方案,也是一种方案,但是呢,我们就不采用了啊好,那这个就不多说了啊,大家呢,有兴趣可以去了解一下,这个呢,我可以告诉你在我的G上面这个有代码。啊,我写过这个。是可以运行的啊,最早的时候在之前上课的班级里边,我讲过这种方案。啊,讲过这种方案啊,我到时候跟他说在我K哪个位置对吧,如果你想看他可以啊,你去找一下我代码,到时候我告诉大家这个是哪一个班级里边我讲过这种方案,OK吧,这两种我都是写过的啊,课堂上都写过的啊,两种都写过啊好,咱们班呢,就用这种用广播流的这种方式,OK吧,这是我们之前讨论的啊,它其实也是这个呢,也是一部过滤。对吧,它也是一次过滤,就是过滤出来我们想要的这个维表数据啊好,那这个呢,我们来看一下整个的一个流程啊,其实我们都分析过了,来我们就过一下这个流程就好了。
11:13
我还是一样的,先打开一个模板。然后接下来。啊,就是这里边做的事情,等会儿我们coding对吧,核心的内容就在这儿啊。来看,首先呢,我们消费ods业务主题数据,这是我们的主流对吧,我们把它称为主流啊呃,接下来呢,做接算格式过滤啊,然后呢,如果说不是,就是先校验是否是杰森对吧,作为过滤啊,但这个呢,是来自于业务数据,你不做这个事儿其实也可以啊,那日志数据呢,可能有脏数据,你要做个过滤,但是我们加上也无所谓嘛,对吧?啊,如果不是杰森把它干掉啊,就干掉就过滤嘛,好。呃,那另外我们把数据写到这个主流啊,写到主流,当然呢,还可以做一次过滤,把我们。
12:04
要的我们只要put,然后呢,Inser update的只要这三个数据吧,啊不要putto不complete啊,那个d delete的都不要,这种都不要对吧?好,那我们呢,所一的过滤形成我们的主流,另外呢,我们再用fli CDC读取配置信息表。啊,配置信息表,形成我们的配置流,然后接下来我们要把配置流做成一个。广播流对吧,把这个配置流处理成广播流,然后接下来我们拿着主流跟广播流进行连接啊connect对吧,创建一个叫连接流,连接流接下来就是处理。我们的连接流,连接流里边有两个方法。有两个方法对吧,一个。第一个方法处理主流的,第二个方法处理广播流的,好,那我们知道广播流数据来了,把它写到状态,而主流数据来了,要根据一定的信息去读取状态里边的内容,然后呢,根据状态里边,诶有没有我这个数据。
13:14
对吧,然后决定。我这个数据要不要输出。对吧,啊,因为他呢是process方法,你可以把你要的数据输出,所以他也能够起到一个过滤啊,那最核心的业务就在这儿。对吧,最核心的业务就在这个位置,OK吧,好,那之后呢,把我们要的数据拿到以后,我就可以将数据。把这个数据写出来,写到我们正常流里边,对吧,最后呢,写出。这么写出对吧,这就是我们整个的业务逻辑啊,那对于这个业务逻辑大家有没有问题。看一下啊,整个的流程对吧,有两个流。主流。
14:00
主流对吧,配置流连接形成一个连接流,然后呢,处理连接流,这个有没有问题。没有问题的扣一好吗?只不过说我们把之前分开讨论的一些点给他汇总到了一个。流程图里边,因为这样的话,大家整个逻辑就会更清晰一些。对吧,他整个的逻辑就会更清晰一些,没毛病啊,好,这是我们再次对这个思路做了一个整理,因为刚才我们是分开去讨论的,所以分为三块嘛,第一块读取数据对吧,但是中间也过滤这些点呢,我们前面没提没提,因为这是细节的点了,第二个。过滤对吧,根据配置信息过滤第三个数据写出这不是我们刚才所说的分三步走嘛,对吧,最核心的其实就是三步OK吧。
我来说两句