00:00
Di呢,提供了三种不同的查询类型,我们一起来了解一下,第一种呢是快照查询,什么叫快照呢?简单来解就大家记住就是四个字叫全量最新,哎,我就要查询当前呃,数据最新的一个状态。全量最新就记住这四个字就行了,这就是快照查询,那区别于两种表类型有什么特点呢?Cow表你就是直接查询最新版本的PA的文件就可以了,这个好理解吧,因为最新的这个帕文件肯定是全量最新对不对?嗯,那Mo表就不一样了啊,Mo表需要做一个什么?呃,就是说即使要去合并,读的时候要去合并,合并什么呢?最新的文件片里面当中的基本文件也就是PA的,呃,还有呢,一些点log里面的增量数据,增量文件,它会将他们合读取的时候进行合并,合并的时候展示给你啊,所以呢,呃,提供一个进实时的表,因为它合并还需要一些延迟嘛,是吧?所以M2表你去查询的时候有一个读取延迟啊,就在因为它做一个线合并啊,行,这个是快照查询,下面这一张图,简单搂一眼啊,这什么意思呢?呃,大家注意。
01:19
看这边有四个什么呢?文件组,然你不要看错了,看成什么fair的啊,不是字段,这是fire ID啊,它这个字体可能容易看错啊,这个是ID,然后这是fire id1234表示四个文件组啊另外呢,就是呃,这个是Co表为例啊,那我们看啊,它在十点钟的时候啊,用这个淡蓝色表示进行了一次commit,那这个时候可能插入的呃,只有两个文件组,文件组一还有文件组二,你看他们有蓝色的对吧?好在之后呢,在绿色的这个时刻,也就10:05,呃,它又有一批新的数据commit了,那这个时候呢,可能涉及到什么,呃,文件组一文件组二里面数据的更新,还有呢,一批数据的插新数据的插入啊,也就是文件组三了啊,所以大家可以看到一二呢,这里有更新啊,然后三呢是新插入好,那么粉色的这个就10:10的时候。
02:19
后再一次COMMIT1批数据,这个时候可能涉及到文件组一文件组二的更新,对吧?啊所以呢啊一二又更新了,然后呢,又有一批数据新的插入啊在文件组四在所以呢这个是个不是个动图啊,所以大家要会看,那完事之后呢,我们可以看到你在10:05的时候去查询。它的全量最新快照是什么?你看在零五分的时候,你进行一个快照查询,全量最新是什么?是不是文念组123里边的这三个pack pack文件呢?对吧?啊,所以你看有文件组123里面呢,他们的版本都是五分的时候,这个时候文件组四还没有生成呢,还没有呢,能理解这个意思吧?呃,另外呢,在我们10:10commit之后,这个时候你再去做一个快照查询是达到什么效果呢?呃,首先文件组一,文件组二是不是都有一个最新的pack文件是吧?一二里都能查到,那四呢,也是在十分的时候新插入的新生成的帕也能看到,关键就在于三了,对于三来讲,你可能觉得诶十分的commit跟他没关系是吧?
03:36
虽然你没有数据的变更,怎么样的没无所谓,但你现在是最新状态是什么,你也展示出来呗,啊,所以你这里能看到什么呢?文件组三它的版本还是停留在10:05,因为这就是他的最新版本了。能理解这个意思吧,这就是这张图的意思啊,慢慢去解读,那么看,呃,一个叫增量查询,第二一个啊,它是什么意思呢?它可以查询给定的提交或者增量提交,这个提交就对应咱们那个Co表的方式啊,德尔塔就是对应Mo表的这种方式啊,呃,给定了这个某一次commit以来新写入的数据。
04:18
对吧,就比如说刚才这个例子,如果现在时间已经到了,经过了10:10的commit,呃,你可以怎么样呢?你可以指定说哎,我从10.05分之后,或者从十点钟之后以来新提交的,而而而不用去查询这个commit之前的一些数据的啊,新写入的数据啊,新写入的数据,这个时候我们而且还可以开启一个变更流啊。变更流来启用增量的数据管道,还记得咱们前面聊到护底的一个使用场景,是不是有一个增量管道啊,对吧?那也可以依赖于它的增量查询啊,说白了就是过滤一个某个commit之后新写入的数据啊,其他就不要,也就是说它不是全量最新啊,不是全量最新,而是指定commit之后新增加的这一部分数据,好了,还有一个叫读优化查询。
05:13
呃,独优化查询呢,它也是什么,大家看描述的话是commit,还有compassion。表的最新快照,有的人就有疑问了,那这个跟快照查询不就一样吗?诶大家注意,咱们这边描述可不一样,看看前面这个是什么?快照查询,Commit。它也是commit,但是第二个就不一样,这个是德尔塔commit,这个是什么compassion,那么知道普通的commit对应的是什么呢?就是Co表啊,所以快照查询对于Co表来讲,快照查询跟读优化是一样的,但是对于Mo表来讲就不一样,这个德尔塔这个compassion也好,都是对于Mo而言了,对不对?读合并,那德尔塔commit,呃,就是。
06:07
增量提交,那我们知道。呃,增量提交完,然后你再去查这个快照查询一定是全量最新,但是compassion就不一定了,因为每次compassion之后,它是会将呃,Pack。老的PA跟多个log进行一个合并,生成一个新的什么新的pack是吧,新的PA,这是compassion,但这个新生成的这个park一定是全量最新嘛,不一定啊,为什么呢?我可能在compassion之后又进行了好几次的增量提交,又多了好几个点log文件,能理解吧,但是如果是读优化视图,它的区别在哪?它只会查询最新compasson之后的这个他文件,也就是说在这一次PA后面的这些点log他查不到了啊,所以对于Mo来讲,它并不是全量最新,能理解吧?好吧,那看下一句话,他仅将最新的文件片,最新文件片嘛的什么呢?列文件暴入给查询,这就我刚才讲了,如果是mor表我在某一次。
07:23
开之后它是生成了一个新的pack,没错,但在这之后呢,它又多次提交,又有又有新的点log写过来了,这个时候你只查到pack log,你没有查到,没有合并啊啊,这个是要注意的地方,这个是独优化啊好,那下面有一个具体的对比啊,下面这张图就是对于mor表而言,它的快照查询与独优化的一个对比一样的啊,我稍微放大一点,我们来挨个分析啊,那么在呃,从10:01开始,差不多每一分钟进行了一次增量提交是吧?啊,都是白色背景,那么在10:05的时候触发了一次compassion,大家注意compassion,那触发compassion之后有什么特点呢?就是会生成一个新的pack文件,哎,那对应的是哪一个呢?呃,文件组一,文件组二,文件组三,在10:05的时候,Compasson之后生成的。
08:23
基本列文件啊,用绿色表示好,那么接着往下看,在零六分,0708 0910的时候,分别进行的都是什么?增量提交,增量提交,每一次提交是不是生成一个点log文件对吧?啊所以你看对于文件组一来讲,它包含了啊,零六的点log,零八.log09.log那对于文件组二呢,它有零七的,有零九的,有幺零的点log对吧?那对于文件组四三啊,压缩之后它没有新的数据来啊文件组四,呃,一开始是没有的,但是在零六分和十分的时候都是,呃插入的数据嘛,相当于是对吧,插入的新插入的数据,好那这一块呢,它就有一个点到一个点到,能理解吧,好,那接下来就是什么呢?呃,我们在十分的时候进行查询。
09:17
十分的时候进行查询,这个是什么?读优化的方式,这个就是读化视图的方式,你去查,呃,按照10:10这个这一次commit为基准的话,你能查到什么呢?读优化视图咱们说了,他只查他会的文件,也就是说绿色的这三个能查到,所以你看是123,并且这是零五分的时候compassion,那文件组四的这几个点log他就查不到了,查不到啊,那如果是快照查询,实时的查询,呃,它所有的都能查到,因为它是全量最新,能理解吧?啊这个图想表达的就是这么一个意思。
10:01
好,那这个读优化视图是专门针对Mo表的一个快照查询的优化,为什么要这么做呀?刚才也讲了,我读的不一定是全量瑞星。那既然如此,还要他干嘛啊?其实就是为了查询效率。你想想,如果我是都是快照查询,那么外表每一次查询我都要进行一个呃呃,读时合并代价还是有点重的,我的读取延迟还是比较大的,那如果这个时候我能接受呃,稍微的滞后,也就是说即使不是全量最新,那也是相对来讲比较新的吧,退而求其次嘛,但是我的效率能有一个质的提升。啊,主要的目的在这里啊,那你看呃,数据延迟呢,是比较低啊。呃,快照那读优化呢是比较高,查询延迟呢,快照比较高,因为它要现合并啊,那读优化呢比较低,它直接读pack,他不读log。
11:04
好,所谓的数据延迟,这里怎么理解呢?也就是说我现在10:10的数据已经写入了。对吧,比如说就就刚才这个地方。啊,10:10一次提交啊,往文件组四写入了点log文件,但是我却查不到,我现在十分我却查,我查不到,那不就是有延迟吗?我可能再等下一次compassion这些数据才可见。对吧,下一次compassion之后这些呃,合并之后这里才可见啊,这个就是所谓的数据延迟嘛,啊,不是立马就能查到好。那我们看看不同的表支持的查询类型啊,其实对于cow表来讲呢啊,就简单的两种,一个是全量最新的快照,还有增量两种查询,对于Mo表就除了这两个,多了一个独优化,就这这就没了啊。
12:08
那下面呢,是官方的啊,做的一个PPT动图啊,大家也可以去稍微理解理解啊。
我来说两句