00:00
那现在有了护体表,我们来尝试着查询一下,那查的话怎么查呢?其实还是一样,从Spark去读取对应路径下的hold地表啊,就Spark这个contest,我们直接去Spark session嘛啊,直接read。之后呢,格式指定为糊底啊,同样的道理,由于我们集成的那个架包,所以它就能够识别了,另外不要忘了它需要写一个漏,也就写到对应的表路径啊,你要读取的护底表的表路径一定要写到表路径啊。然后呢,我们需要,呃,我们再把它创建成一张临时的视图啊,起个名字OK,那这边要注意的是什么呢?这张表我们知道分区字段,它里面包含的多级分区啊,对吧,我们是有三级分区的,那如果是老版本的护底,0.9以前的护底,呃,这个时候我们需要在表路径,然后在拼接上,呃,这样子。
01:03
也就是说有几层路径你就要拼接几层,那么当前版本就不需要它自己会去识别啊,这是一个小事情,也就是说你加载路径必须把每一级的分区路径都得表示出来啊,用星号去拼接啊。拼接一个新号啊,不是说让你自己替换成具体的就写个新就可以了啊,那当前版本就不用了,行,那我们就快速的把它注册成为一个temporal view啊。好,直接还是粘贴就行了啊,这种写法就没必要去敲了啊,浪费时间啊,就很简单的语法好有了之后我们是不是可以直接查了呀啊,你可以用DF去,你可以去show,直接df show,也可以用Spark circle的语法来写啊,像Spark circle你就可以点circle,然后可以写一个select语句啊,然后再show一下,那么lower嘛啊,这个也没必要敲了,那字段都是我们那个模拟数据啊,那在这里我们可以看到指定的这个FA,还有这个字段,这个字段TS啊,我们只简单查了几个字段啊,你也可以星啊星那就星一下吧。
02:17
好,往心一下。呃,但是新的话自然就多了,对不对,我缩小一点,哎,我这边想说明的一点是什么呢?我我尽量缩小,哎,看不清楚啊,我想说的是,其实每张忽底表它都有几个隐藏字段,分别是什么呢?你看忽底的提交commit时间,那你看这个是什么?这就是我说的拼接年月日十分秒,那我们仔细看一下啊,这是年月日时。分秒毫秒对吧,它是直接拼在一块的啊,而不是说距离1970年有多少时间出好吧,啊然后呢,还有一个commit的一个序列号啊,其实它基本就是一个时间戳,然后在拼接上其他东西,还有这个是什么record key,这个是不是由我们去写入时候指定的record key,就是用的UUID啊,UID,还有呢,分区路径啊,那这个是多级的,看到没有在一块看到whodi fire name,嗯,Name啊,就文件名。
03:27
对吧,前面基本有几个五个隐藏字段啊,一个小事情。这是一个查询啊,啊,你看我这边后面单独写了一个123对吧,这边列了几个字段出来看啊行,这是一个正常的查询,你就会Spark就就会了,接下来呃,说白了,咱们的集成只是放一个假包,然后格式指定为护底,还有一些配置下,该指定的去指定就OK了,接下来就是正常的一个操作了,所以对大家来讲应该是没有什么学习成本啊,无非就是前面我们花了大量的时间去讲那个核心概念啊,那些你把它理解就OK了,用起来的话倒是没有什么难度啊,没有难度好。
04:14
另外一个事儿呢,就是忽底还有一种查询方式是叫时间旅行的查询,什么叫时间旅行啊?啊,就是我要查询指定时间点,指定时间点的一个commit啊。就比如说呃,现在commit都多次了啊,时间分别是T0T1T2,咱们不是有个时间线嘛,对不对。是不是有个时间线呢。时间轴嘛,Timeline嘛,那我们说timeline呢,是一个一个的instant对不对啊,每个instant都有对应的什么呢?一个是它的instant的时间,还有呢,他的动作action,还有他的状态是不是啊,那这个时候已经到了T2以后了,那如果你想查T1的时候,这个时刻的呃数据它的状态也是可以的,你只需要指定一个instant的时间即可啊。
05:14
那我看一下咱们目前的这个。Commit time应该都是一一回事儿啊,应该都是一回事。呃,那具体呢,就是这么一个配置项就可以了,那我们试一下呗,呃。但是这个时间戳不对啊,这个是以前的,那我想想啊,我们现在都一样。嗯,那也简单,怎么简单呢,我们只需要再重复执行一下前面这个就行了,就插入数据,我们再插入一遍呗。再插入一遍啊,就这这呃,Overri,我们改成append就可以了呗,啊稍等一下。
06:07
好,Aend不就OK了吗?是吧,但是aend咱们一会再来吧,因为后面咱们要讲更新数据,更新数据其实有点类似于插入新的数据,那回头咱们就aend了啊,这个咱们先呃简单理解一下,一会儿再来玩嘛,啊讲到更新的时候再来玩这个事儿啊。好,那接下来我给大家补充一点啊,就是咱们可以看到这个地方,这个pack文件前缀这么长,那它到底是什么意思啊,那我听我一一道来吧,啊,那么注意它的连接服务是什么?是下划线,也就是说咱们根据下划线分成几块来看啊,哎,我先在这里切一刀,呃,然后这个下划线再切一刀,哎,然后这个后后缀切一刀,它其实是由四部分组成,第一部分是什么呢?这么长的一串东西,就是咱们前面一直讲的fire ID还记得吧,咱们聊到索引的时候讲过呀,呃,每一个。
07:16
它它里面是不是按照文件组来组织的,每一个文件组有一个唯一的fire ID啊,当这个呃生成这个文件组生成的时候,这个fire ID就已经固定了,不会再变了啊,这个就是所谓的ID,它默认情况下是通过UUID来取的啊,也就是挺随机的啊,然后中间这个东西呢?嗯,怎么理解呢?这是它拼接的一个token啊,一个token啊,你可以不用管,呃,那后面这个东西应该就很熟了吧,这个其实就是instant time啊,Instant time也就是说咱们那个commit t啊。好,那最后一个是什么,就后缀啊,由于咱们cow cow表它只有一个什么呢?呃,帕德。
08:05
对吧,没有什么点lo啊,就简单了,那如果你要看源码也简单啊,呃,这样,呃,我这边有一个写好的,你直接搜什么呢?我相应的依赖都放好了啊,相应的依赖who d Spark的这个依赖好,那么接下来咱们直接搜啊,CL shift加F搜一个什么呢?呃,应该是叫base fire name。啊,Base fair看一下啊,你看啊,就这里在FSU,这是忽底的类啊,他在这里有个方法叫make base fair啊,当然它有两个,有一个回头要被遗弃掉,那这个东西呢,大家就看一眼,呃,这个是。我们把它缩小。它都一样啊,你看这个字符串格式化,也就你看它是通过什么下划线来拼接的,第一个是什么,第二个是什么,第三个第四个,那我们来看吧,第一个是什么呢?Fair ID,第二一个是啥呢?一个token啊,第三个呢,是一个instant time,第四一个呢。
09:14
就是它的后缀啊扩展名,什么叫扩展名啊,点PA就是后缀扩展名吗?能理解吧?啊就这么简单啊啊这个呢,我也可以截个图放到文档里啊,给大家去看一下啊。那这个我放到哪呢?放到前面这个地方吧,诶,咱们这插入完数据不是,呃,这个地方。嗯。我再放一个截图,就是这个啊PWD,然后is。
10:01
这样大家就方便去看了,好吧,啊,就知道这个文件起名是什么规律,那说到这儿我顺便提一嘴,那个如果是log文件呢,在同样这个类里面有一个make log。啊,我搜一下CTRL加F12有一个make log file内啊,那它同样的,它是拼接的,什么fire ID呀,Commit time嘛,还有log的后缀啊,扩展名就点log后面,它还会跟上一个叫版本啊版本行,嗯,那就先到这儿吧啊。
我来说两句