00:00
啊呃,上午呢,我们是讲到这个管理表和外部表啊,它的最核心的区别就在于我们所说的就删除数据的时候,对吧用如果说一张内部表跟外部表用都一样,就删除的时候它不一样啊,一个只删就是外部表呢,只只会删除MY搜L当中的那个原数据信息,而对于我们所说的管理表来说,它不光会需要我们原数据信息,同时把HDL当中那个数据也给删了,对吧?啊,这是它的一个区别,但是你不用担心有这个区别,说我电表建错了对吧,把电表做错了,但如果说你刚建的话,也可以删了,重新建一下也无所谓。对吧,你如果说表刚建的话,但是已经在使用过程当中,你发现接错了,咱们也有办法给他干什么。改过来吧,这个呢,就是京东的一道题啊。他就会,他当时就问了,呃,管理表跟外部表的一个互相转换啊,你要注意一下,就这里边那个什么。大写啊,大写很多那个大企业有一些奇怪的问题啊,到时候给大家看啊,就京东的题还挺挺奇怪的,京东那个书仓那块有问题。
01:03
好,然后接下来我们看一下这个分区表。啊分区表,那首先它的意义在于哪呢?这。分区表实际上对应HD一个文件系统上独立的文件夹。啊,那这个讲的什么意思呢?是这样的,我们目前来说。来看一下我目前的一张表,它是不是一个一张表是一个文件夹呀。来。这个地方呢,我们有四张表是吧?啊四张表那A什么s to这个呢,都是独立的一个文件夹,而且这个文件夹底下我们就知道它是一个什么。底下就放着数据对吧,如果说我们想里面插入数据,或者是漏了数据的时候,而对于分区表,它底下不是数据。它底下还有一集。不。就是我们的分区,分区也是拿出来一个字段作为分区条件的。
02:04
啊,作为一个分区条件的,就类似于假如说我们可以按照时间分区啊,这个student的表对吧?啊每天报名的有多少人,我们分一个区,那这个里面呢,在底下就可以有一个什么2019杠零七杠零二。好,这个东西,它同样的还会有2017杠,2019杠零七杠零幺这个文件夹,还有那个什么零六杠30啊等等这些文件夹,而在这个文件夹底下。才有我们真正的像这一堆东西一样的数据啊,他把这个数据给它分开,那这个分开有什么好处呢。我们之前提过一个点还当中他没有索引,还有印象吧,我们查询一个东西的时候,它是不是要暴力扫描全表。那是因为你把所有的数据都放在一块儿了。如果说我们能把所有的数据呢,按天。来分开存储。按填来算,分下组,假如说你只想访问7月1号的数据,你可以加一个不要条件,那个分区字段等于7月1号,那他只扫描这一个文件夹的数据,它不会全都扫描。
03:10
啊,那这块呢,是我们所说的一个好处,它避免了全面扫描啊,所以说我们之前说过,在生产环境当中,分区表在大量使用了。啊,一定要用到,那我们这个呢,就先讲到这样为止,然后呢,我们来看一下怎么用的啊,看一下怎么用的,刚才我们所讲的就是这个分目录,然后呢,把一个大的数据集,根据业务需要。啊,通常情况下都是按照时间,按照时间分是最多的,有的公司数据量大的时候,他可以按小时分。作为一个小时一个文件夹,一个小时一个文件夹,像正常一般情况下说,我们采用的都一天一个文件夹,一天就够了啊,一天的数据量放在一个文件夹里边,然后呢,分割成小的一个数据集,通过查询的时候用不去,因为我们所知道。整个serve的一个执行顺序,Will先走对吧?当然from表在前面,然后是will吧,啊,然后是will,哎,这个东西它还有一个名词,你们知道叫什么吗?
04:07
就from之后。他为什么先走不。是为了他为什么不把先把所有的数据查出来,最后怎样?他整个规划的时候,为什么要这样规划,是不是提前把数据集过滤出来,这有一个名词,这个东西呢叫位置下推。叫为此下退。为此下推。诶,下。第三,这。嗯。叫位置下退。啊,位置下对,这有个专业的名词啊,就是位置下推,面试的过程当中,他提到这个东西的时候,你要注意一下啊,要注意一下有可能他有有的学员就会问到位置下对什么意思,其实就是先走的过滤,这个呢是他在执行思会的时候,相当于自己的底层做的一种优化,因为我们知道先走重要条件之后,你接下来处理的数据集是不是就少很多,这个给我们的提示是如果说我们在写so的时候。
05:14
两个表交应,你把不要条件最好写在交应之前那个词法语义。因为防止就是正常情况下,无论是high啊,还是那个,他会给我们做这个优化,但是防止失效,你自己写也就这个意思,假如说啊,这样我有个A表,一个B表,本来我要交易之后,我在这写一个V,什么a.ID大于D表。正常情况下它会根据位置消退,所以你做优化,它会先把这个会氧条件先行先走,但是你要防止它失效,你把这个干什么?写在这个交易条件的前面啊,你这个A表啊,不是单独一个A表,而是一个子查询的表,能懂这意思,降低数据集啊,这也是我们刚才提到的那个微字加对好,那这个地方呢,我们说在查询语句的时候用well词句。
06:07
来指定分区,这样可以提高传输效率,主要体现在我们可以缩减什么。查询的数据量。本来你把所有的数据放在一个文件夹里边,你扫,哎,365天了,一年的数据,对吧,360天的数据全部扫过来,然后过滤出来这一年的,但现在呢,我们把365天的数据呢,放在365个文件夹里边,你想查7月1号,你过滤条件写7月1号就够了。啊就够了,我们等会把这个建了一张分区表,把分区建立完之后,我跟大家说一下,为什么他能做的这个点,它这个分区信息到底在哪存着。啊,到底在哪存着,因为现在我们没有分区表,没办法接着说这个事,他是怎么做到这个点的。啊好,那这个是分区表整个的一个概念,那么接下来看一下。就好。分级表,呃,首先呢,正常情况下,在生长环境当中,我们说了正常的,我们看到那个log附件那个关于汉的日志,是不是看到了。
07:08
他每天滚动一个文件夹啊,一个文件嘛啊,每天滚动一个,每天滚动一个,而在生产环境当中,我们自己后台的日志也是每天。滚动一个,然后我们把这一个文件呢,上传到HDS,然后加载到它的表里边。你可以加载到一张表里边,但是更多的我们加载到分区表里面,也就是说在HDF上我们是需要将数据存成这个样子。来看一下,这个呢,是表明有havehouse。捞个水。啊,这个log话题呢,是名字,然后这个就是分支信息,7月2号,7月3号7月4号啊,然后点log就是我们产生的那个日志,当然正常有的日志呢,可能是后面跟着那个具体的日期对吧?啊滚动的,那这个怎么做呢?来看一下在监表语句里边还记得这些东西吗?
08:02
首先你来看一下这前面table,这就建立一个管理表对吧,因为没有加X的关键字,然后呢,这个是第1PD。就是第1PT那张表的一个。表明分区表明啊,然后呢,这个跟之前的一样。跟第那张表一样,只不过说额外多了什么东西啊?好的,人们month,假如说我们按月来算啊,这个无所谓,分期字段随便填。它也是一个字段,好,我们把它建立一下啊,只是多了一个partition的这个内容。走。那现在呢,我们就多了一个这个表。啊,多了一个列表啊D排,那我们从这个HDF上来看一下。因为进来有区别吗?没区别对吧,啊,现在没区别,因为你并没有添加分区信息。你并没有添加分区信息,现在呢,我们想把数据加载进来。
09:03
还是一样的,漏的地叫。然后,然后那个。B啊,然后把它拿来。这里面呢,就有一个dept.TC,按照我们之前所写的是into table,然后这个呃叫DBD向环境part这张表达,那我们同样的走向是什么走?他说什么东西?他说你需要指定一个分区列。因为他说这个表是什么,是一个分区的吧,啊是一个分区表,那这个地方怎么写呢?也就是在这后面我们要加一个part括号,具体的你要把这个数据加载到哪一个分区里。啊,那我们分区作战是不是用month。
10:01
对吧,那等于不是四倍类型吗?啊还是四倍类型2019杠零。七啊六吧先。走。这个时候就加载进去了。这个时候就加载电表,OK,那我们再看一下这张表有什么区别,刷新。这是一个什么?一个D是一个文件夹。啊,也就是说这个数据就是我们所说的分区,其实分的是分现象。假如说现在我不想这个,我把它改成什么。走。那现在他就会多一个什么。有两个文件夹,同样的,如果说我来扫描数据,Select she from,然后这个de PT_part,对吧。两个数据是不是都能看到,而且能看到,其实我们分计算它这个month,他把算做了什么。
11:05
是不是一个列看见没啊,其实分区字段也是它的一个字段,但是这个字段比较特殊。特殊的原因就在于它是放在文件夹,我们从ID上是不是看到放在文件夹里边了。第二个来如果说我们用费。可以直接month等于2019杠零七。那就只查出来零七的一个数据,所以这个也可以放在不要词句里面用,你就把这个东西当做一个最普通的字段用。就是使用上面最普通啊,是跟以前我们里边什么部门ID啊,部门名称啊,部门一个位置信息啊等等,这个是一样的,就使用方面,但是它比较特殊,特殊在哪呢?第一点我们从这个上面看出来,它并不是放在实际数据里边的,而是放在文件夹上面的。对不对?第二方面来看一下我们所说的这间我们提到一个点,当我们使用V要字段。
12:01
来对分区信息进行限定的时候,它就能避免掉全秒扫描,它是如何避免的?来看一下。因为它最终这个分区信息啊,是属于我们的原数据信息。来在这表里边之前,我们是不是看一个DDS,一个TDLS对吧,我之前还说过,其实还有一块比我对我们比较重要,是不是当时给他勾的这个position。对吧,那这块我们看一下part。因为他这个字段实际的数据存在这儿。那我们回过头来想一下,我们之前所讲的have这个东西在HD在读数据的一个流程。来想一下它是怎么来避免这这的全面扫描的呀。数据from这个数据走过来之后,是不是走了先定位到这个表表呢,有关联自己的一个。
13:02
DB。数据库,数据库里面不是有地址,整个的地址吗?对吧,是不是把表定位到了,然后发现你是一个分区表,它相应的来看一下,因为你有非要字段嘛。因为V要磁段我们写了,注意你们写V要自段的时候,他还是全面扫描了,对吧,因为他最后把全场的数据都拿出来了,现在我们限定了V要磁段,而且我们知道对于正常的思考逻辑来说,From之后呢,他会先去走不要了,走过率嘛啊,走过率的时候他发现这个东西在哪啊。是不是在MY当中啊,也就是说他还没有去访问HD之前,他就已经知道将来我要访问的HD具体的是哪段公路呢?能不能听懂?能不能听懂刚才所说的意思,首先呢,他是要去访问原数据库对吧,也就是MY搜狗这个地方去找到,他是不是要去找HDF对应的实际的数据路径呢?
14:00
对吧,那这个时候由于他找到那张表了,他准备呢,把那个库啊明啊那些东西都拼接起来了,拼接一个什么AA这个表,然后发现走不要的时候。发现你非要先拎的是什么东西啊,Month?哎,是分区信息。是分区信息,他这个时候发现分区信息,因为分区信息这块它有自己的一个什么。都这样关联的啊,它肯定是属于某一张表的,对吧,你不能说这个分支信息放在这儿,我所有的表都有这个分支信息了,那不能报啊,它都有关联的表的,他知道诶这张表里边有分区信息,他把这个拼接上。那你想想看,假如说我喂养条件写的貌似等于2019杠零六,它是不是最终会定位到这一个文件夹?对吧,那其他的文件夹还会去访问吗?不会吧,这个就是我们所说的分区表,它能够避免群秒扫描的一个点,不是说你这个东西进了分区表,每次产品的时候他都不做群秒扫描。而是说在where子句里边,我们自己加了什么东西?
15:04
对分区的一个限定,那么啊,如果说你没写对啊,你看这个上面一个这个语句,那他能不做全面扫描吗。怎么可能呢,对吧,他要不做全程扫描,那这些数据我们怎么能出来呢?啊,只不过第二次查询的时候,他不是做全程扫描,而是扫描的一个文件夹里面的数据。啊,这是也是我们所说的它这个意义所在啊,同时呢,也跟大家说了,它是如何来通过这个原数据来得到我们AB免掉全面扫描的,就是因为它这个字段你在使用的过程当中,完全的当普通的一个字段来用,但是它其实是比较特殊的,因为这个字段的数据是存在my surface的。啊,同时其实我们不看MY这个字段也比其他的字段比较特殊吧。其他的呢,你知道是不是在这里面。所以数据呢,它在哪啊,它是文件夹啊,文件夹跟那个路径整个一样的,是不是属于原数据信息啊,所以呢,它比你真正的数据要先访问。
16:03
你要先访问,虽然我们所说的PA这个没有索引,但其实这个分区信息是不是有一点那种索引的感觉。对吧,有点像那个所引啊,有点像,但是跟索引还是有区别的,因为索引它是具体的字段,直接一个一个列给拿出来吧,啊就是这个表已经建立好了三个字段,然后我们对这个表再重新建立出什么,而这个分区不一样,是我在建表的时候,哎,我把有一个字段啊给它特殊化,把它定义成了这个什么。分期资产是这个意思啊。这个。
我来说两句