00:00
那么接下来我们聊聊一个changelog,这个也不算写入啊,那么。如果我们希望户D表保留消息的所有变更啊,就比如说我们前面查的时候是不是有什么加I啊减U啊加U啊啊减D对不对啊,虽然我们是看到了,没错,那是因为我们我们用table的方式格式可以看到,但是你你想想我举个例子啊,我举个例子啊,那比如说现在呢,我同步过来啊,这个是忽底,那假设有一条数据是EA啊,EA已经在pack里边啊,已经在pack里边,然后呢,咱们的点Og.OG里面对这条数据进行了变更,那变成了1B啊这样子,那你看这个时候如果我们是快照查询,诶同学们,如果我们快照查询是不是全量最新呢?啊比如呃,比如说是Mo表嘛,那是不是我们对于这条数据我们只会查到一条1B。
01:05
对吧。那这个时候你想既看到历史的EA,也想看到更新后的EB,可以,那这个时候你就什么开启这个所谓的changelo。对吧,Change log,那么接下来呢,就是开启之后呢,这个EA跟EB你就都能看到啊。都能看到。那其实更合适的场景是用什么?用流毒,流毒天生天流毒表天生是不是就有那些什么加I减U加U还有D呀,是不是啊减D啊就这些操作天生就有啊,你看现在不就天生就有吗。那这个时候你你也不要说虽然是流毒啊,但你也不要说合并成一条,结果1B给我啊,给下游去使用,我还是希望说EA跟EB我都能拿到啊,这个是允许的,我们那个之前能看到是因为我们用的是table去去观测啊,但实际上我们如果去count的话,它是不一样的。
02:11
因为他要做一个独石合并嘛,啊,说白了就是独石要不要合并嘛,就这个事儿啊,合并这个结果。那我们接下来呢,可以做一个什么呢?我们创建一张表啊,来玩一下啊,那我先先说一下啊,这个默认是关闭状态,如果是upset语义啊,所有的消息仅保证最保证最后一条合并消息中间的结果可能会被默及掉,那如果为true啊,我们就能够消费到所有的变更,但是你要注意一个是compassion,如果compassion掉了啊,就我刚才画的啊,有EA,有EB,这个是在PA回的,这个是在log,那结果compason执行的啊,完了,它生成了新的PA回的只有一个1B的,那那你这个1A11A还能拿到吗?啊,除了用时间旅行之外,你就拿不到啊,所以这边这句话的意思就这这个样子。
03:07
那如果我们是快照读取,仍然会合并所有的中间结果,是否它还在啊,所以呢,我们是不是不能够用用这种P的方式或者快照的去读啊,所以我们只能用什么用流毒,也就是说你要用change log,你必须结合流毒来使用啊,要不然要不然没用啊,要不然没用好了,那这另外就是我刚才提到中间的变更也是最好的一个情况啊,那是什么呢?异步压缩也会将结果合并掉,这个我们刚才讲过了,也就是说流毒消费的不够及时,被压缩完,只读到最读到最后一条记录啊,所以呢,我们可以调整compassion的一个时间啊,然后给他预留一定的。呃,读的时候让他尽快的读走,他只要读走了就好了嘛,啊就我们可以根据时间或者次数嘛,大家回忆一下前面压缩参数,这里咱是不是聊到了一句。
04:06
啊,没在这里说啊,我想想在哪说呢。恩,我记得有一个。嗯,搜了一下应该是在流毒这里啊,你看我们在这个的时候,一个是是不是有个清理的保留的流毒里边啊,我们是不是介绍到这个参数啊,就是保留了最多的commit数啊,如果超过这个会被清理掉,这个可以控制change log的保留时间,对吧?啊,所以跟这个清理啊,你都被清理掉,你还想读到那是不可能的啊,不可能的,那接下来我们就快速的来试一下吧,啊,那设为TABLE6可以啊。那另外这个功能是0.10之后才支持的啊,呃,应该当时是标记为实验性啊,那么还是处在一个快速迭代的时候,所以这个方式呢,嗯,你就可能会遇到一些问题,到时候呢在呃。
05:11
大部分场景是OK的啊,大部分场景OK。那这边是官方画出来一个场景,我们从my circleql也好啊,卡夫卡也好,一些地方通过flink把它写入到互地表,这个时候可能比如说你用CDC,那它就有变更数据,那变更数据如果是我们快照查询互递表,那只是最终结果,也是合并后的结果,对吧?即使你是二表,那如果点log还没被合并,那这个时候我们用flink消费,如果开启了change log,那这个时候你的变更的那些像我刚才讲的EEB都能够拿到啊,你可以根据你拿到的这些东西进一步的做一个处理啊,这就是changelog的作用,那这样吧,咱们建立一个跟流毒一样的表,然后呢,我手动去插入啊,我改一下。嗯,这个T6吧啊,T6T6,那这样我要简单一点啊,我就不要这么多了,我这个ID int,然后呢,一个TST好了,就这样啊呃,流毒开启这个什么check interval啊,那就四吧啊改成四啊那么接下来还有什么呢?Change log啊,那个参数还是不要手敲了啊change log。
06:29
Enable没敲错啊,等于two好。那这compassion我就不动了,就默认的五次提交,那我们来试一下吧。好了,我应该是五次提交才会compassion啊,那现在我就insert in two呃,T6VALUES啊,来个一一可以吧。
07:04
哎呀,少个组件,我那加个这个吧。T6我拷贝一下重新来啊。好,插入,呃,那么接下来观察一下HTFST6已经生成了。啊,等它插入完生成那个数据文件。好,现在有一个点漏对吧,呃,如果我们现在去查的话,我们现在是流毒啊。而且开启了changelog啊,不管怎么样,你肯定只能查到一条啊,一条对吧,只有一条,那么接下来呢,我这样我insert into12。如果没有开启changelog,讲道理,这个时候我们读的话,呃,快照读取也是只有一条,对吧,最终结果来讲,这个时候我们再来时代的新。
08:18
那这个你看是不是只有一条啊,呃,因为我们是从最新的位置开始读嘛,那我想想啊,嗯,Change log是开了吧。OK,我看能不能用。咱们用一个增量啊,我看一下,诶诶对增量我指定一下啊。我从artistest开始,这个能不能直接写二呢?
09:04
那这个动态的我就给它打开啊。啊,可以啊。你看那现在是不是可以读到两条数据。对吧?啊,我把这几个案例一会儿都放到文档,回头大家直接粘就行了啊,先insert into,哎,回头再来吧,你看现在是不是拿到两条数据了。那如果我们做一个count。你看它流逝的先读到了一条,哎,然后又发现有第二条之后呢,是不是就把他原来的撤回掉,然后再更新成二啊,这个就是我们靠新拿到的结果,最终是有两条的是不是。
10:17
好,那接下来我们做一个对比啊,刚才我们已经看到的T6是不是s select earliest能看到它的变,所有变更对不对,包括我们的count星都能够看到,那接下来我们在基于这张T6这张表啊,我们就不要去做一些事了,就是说我再建一张view啊。呃,VIVO啊,我叫T6A吧。T6A,呃,T6V嘛啊。就这样子下划线V啊,然后我干嘛呢?我把圈子log干掉,那表路径还是这个路径,那接下来呢,就。
11:02
看一下区别啊,那我就拷贝啊粘贴。好,那接下来好,呃,我们还是执行这两个语句,还是从头开始,那我们看看有什么区别,T6V啊T6V,那先看第一个啊,先是ST星。嗯。那如果我们能看到一一跟一二,一一跟一二都能看到,那说明跟圈子log,这就没什么用,对不对啊。你看只有几条,只有一二,并没有一一,因为我们是Mo表,虽然你是流毒,但我要做读时合并数据,现在是有1A1B,没错,那都OK,但是呢,我读取的时候,我一定是要合并一下读取最新的数据啊,我不会把老的数据被被撤回的数据还给你出来啊,这个就是一个巨大的区别啊,那其次呢,呃,我们再来count新一下。
12:05
看一下他count出来是一条还是两条,大家注意,我现在也是从头读取啊,也是二啊。嗯。好,你看只有一吧,他没有再更新了吧,啊跟前面有一个巨大的区别。好,那这个回头我会补充到文档里案例啊,大家直接复制粘贴去玩就行了啊。
我来说两句