00:00
我们看一下这个动态的一个分区啊,你想想看,之前我们往分区表里面插入数据的时候。都是通过什么select这种方式插入的是吧,银色的,但是你指定了什么,你在插入数据的时候。指定了这个分区是什么内容吗?什么202050626对吧,指定了具体的分区是什么。那有没有办法,我们有一堆数据,那那有什么坏处啊,就是我这一堆数据啊,就必须固定到一个区里面吗?但是我现在有一个什么需求呢。我这一堆日志啊,在这了。我每天产生的后台产生日志,我都是放在那个文件里头。现在我想对这个日志进行分析,但是我建一个表呢,是不是这个表太大了呀?啊,我就想建成分区表。那进争分区表,你这个数据已经在这了,你S来可能要固定到一个分区里面,没有什么意义是吧,你本来是一个表里边的数据,你现在说放到一个分区里边没有意义,我们现在想的是,哎,把这个文件的数据啊,最好放到多个区里边,而且你看这是每天产生的数据,我我们最好是一天一个区吧,或者说一一个月一个区,这样是最好的。
01:18
啊,那这个时候就要用到咱们这个动态分区。动态分区它是怎么做的?是这样的,这不是正常的一个数据吗?你建一个表,你不要对它进行分析,你干什么,这里面不有很多字段吗?对吧,这张表里面有很多字段,在这个字段里面肯定有一个时间的字段嘛,因为你想想看日志,无论是什么日志啊,它肯定会带时间的,时间是一定有的这个字段。啊,证一定要清楚的,后台产生证一定是有时间的。少了时间这个维度,很多东西分析都没有什么意义。啊,他既然有时间,我们对于这个时间啊,设置成一个字段,然后分区的时候呢,你之前不是指定这个month啊,假如说你分区字段是month等于一个。
02:08
什么2020具体的值了,你现在不指定具体的值了,哎,你就把。碳往那一放。就给他一个字段,让它在具体到这个数据的时候,他读这个数据的时候,那这个看本身是一个列吧,但在具体的数据里面,它是一条实际的一个数字吧,哎,它会根据这个数字进到不同的区里面,是这样的一个过程,这个过程明白了吧,也就是说我这个分区表的一个分区字段啊。分区字段,这个地方叫分区字段吧,哎,其实是你原始表里面的。某一个字段按照你这个字段来分区啊,是这个意思啊,这样来做我们那个动态分区,那怎么做呢?来一步一步操作一下。首先你要开启这个动态分区,而且默认是开启的看。
03:07
默认就是出发啊,默认就开始开启了,接下来你要开启一个非严格模式。就是动态分区的分研格模式,注意不不是这个研格模式啊,这个严格模式在后面再讲,这是动态分区的一个严格模式,它默认啊。哎,看一下它的一个默认值。严格模式,他在严格模式下会要求你必须指定一个分区,静态分区。也就是说,像我们之前所写的一样。我们之前写的语法是不是你往数据里边,往一个分区表里边插入数据的时候,你最后跟着一个分区是什么内容啊,是固定的吗?对,是固定的,这是严格模式下。但是我们要做的是什么?传一个字段进去,就是你在插入数据的时候,写这个SQ的时候,你根本不知道你这个数据将会插到哪个分区吗?
04:03
就是说在处理具体数据之前是不知道的啊,如果在严格模式下它是不允许的,所以你要把这个分区改为非严格模式啊,非严格模式是这个内容算了,非严模式。接下来还有一些相应的属性,这个是这个,他说所有直线MR节点上最大一共可以创建多少个动态分区啊,限定了分区的总数。它默认就是1000,这个你不需要改,不需要改来看一下啊S主要看一下动态分区,它有相关的属性,有哪些你需要知道的啊,1000还有一个属性。在每个这个是什么。在所有mmr节点上总数吧,然后这个呢。每一个可以创建多少个东南分区,来看一下。啊,这个属性你一定要结合实际的场景啊,来做到100个100个。
05:06
这个东西假如说啊,它默认是100,你不对它进行修改的话,假如说你的一个日志,刚才我们所说的日志里个文件里边有时间,对吧。你想的是按天来进行分区吧,按天来进行分区,这个时候你一年的数据里面。会分成多少个去啊,按天还一年二天是吧,你这一年过的或者366对吧,就算365,是不是你最终创建了一个分区数会大于这个100啊,哎,那他就会报错,他会报错,因为他不让创建了呀,不让报错,所以说这个地方你要根据实际的需求,哎,你最终大概会产生多少个区来,那你要对他这个数据进行一个修改吧。啊,对它这个数据进行一个修改,那我们演示过程当中也没有那么多数据是吧,100个就用默认值就OK了,但是你需要知道的,它有一个这么个属性,有这么个属性好。
06:07
接下来他说当有空分区生成的时候,是否抛出异常,你就让他不跑异常,因为空分区也是很正常,那就空的文件夹嘛。对吧,你就算你真的去查全量数据的时候,一个空的文件夹扫到的时候也不会扫出来什么东西吧,所以说一个空的文件夹对我们是没有什么任何影响的啊,所以说这个属性啊,就让它保持默认值就OK了,他说C它默认就是不跑异常。啊是first啊,就是你看还有1.errori啊,理解么?就产生空分区的时候会报报错不报错的问题,你就让它不报错,因为空分区对于我们来说是没有任何影响的啊,你就让它放在那就OK了,它就顶多给你创建了一个文件夹而已。好,接下来我们实际来操作一下啊,实际操作一下还是玩的还是我们之前的那些数据啊,那个big table那个数据,看一下它的一个字段还是一样的吧,只不过这个时候我们指定了一个什么。
07:07
分区字段,哎,是按照时间来进行分区的,看到了吧,时间来进行分区的,好,我们把这个分区表串一下看C其他的内容都一样,这样表已经建立完了,建立完了之后。而且我们的属性都相设计完了啊,设置成可以动态分区的这种模式啊,OK,然后接下来往这个。分区表里边去加载数据,加载数据这个加载的数据是什么?你看他加载的。实际的一个表里边了,我们不希望这种结果吧。我们要的是什么,让他动态的去添加这个分区是吧,动态添加分区,那怎么做呢。
08:00
这是他说创建一个目标分区表,这个没用啊,CTRLCCTRLC啊退回去你看一下这个语法。粘出来。你看他这个分区字段写的,没有写明是具体到哪个分区吧,哎,你这种方式啊,分区是不是用静态分区啊,哎,静态分区的插入方式,现在我们改成动态了,也就是说你在插入数据的时候啊。并不指明。它具体的要到哪个分区,而是用一个。这个字段来表示啊,这个字段来表示,那我们这个东西不对啊,我们把这个改一下,我们这张表里边现在没有数据对吧。把这个CTRLC放到这个来。CTR,然后。O我们没有O这张表,我们有的是big table是吧?Table这张表,但是big table这张表里边有这个这一列吗?
09:12
Big big table。Time有time这一列是吧?有time这一列。那如果说我们还time来分的话,它数据量过大了,就超过那个分区了。超过那个分区了,那我们还是为了演示方便,还是按照这种方式来做一下,我们我说一下这种方式是什么啊。呃,我说一下刚才我所做的操作,刚才我创建了一个分区表,然后分区的一个字段用的是一个批,对吧,这是没有问题的。然后我想的是直接从。Big table这张表,往这张表里边写数据吧。对吧,我是这样想的,但是我一看这个,我一分析这个什么big table,它的所有的字段,它只有这个应该是这个内容跟我们的什么。
10:12
分区字段应该是对应上的,对吧,对应上的,但是我们你想想看,这个time它是一个big in的,也就是时间戳形式的话。时间戳形式的,就是说他这个数据量太大了,太大了。啊,所以说不方便测试,我们就回到最原始的状态来,我们回这种方式,我我也要给大家说一下这个方式是什么啊,它是这样,它创建了一个分区表,这个没有问题,大家没有问题吧,接下来它这个加载数据到分区表,是将数据加载到这个里面。加到这这个里面之后干一个什么事呢?他这个分区字段看。它固定到p time,它设置成了两个吧,也就是说最后p time这个量只有两个值,而不是像我们。这个table里边这个time码数据量太大了,数据太大了,现在就是两个啊,只有两个值,最后查的时候它只会查出来两个值吧,OK,最后他这个时候创建了一个目标分区表,也就是说他要做的是将这个分区表里的数据。
11:15
动态的加入到这个里面是这个意思。能明白吗,现在。这个一定要清楚啊,因为刚才我想做的是直接从big table来拿出去,但是我也想big table里面探它的一个数据量太大了,太大了,因为它是时间戳形式的,如果说它是一个年元日形式的,我们把它改成365还能做是吧,365还能做,但是现在是一个时间戳,我们没法对它这个原数据进行修改了啊,时间多太多了啊,那我们就做一下这个,接下来就是导入数据吧。导入数据,他要的是这个地方是DS1是吧,我们把这个拿回来,把这个改一下啊,我们直接导一下吧。
12:00
漏的data怕怕?OPT。Model,然后是斯下面有一个big table吧,我们用small table可以吧,Small table数据量小一点吧,它small table跟big table它里面的数据的格式是不是一样的呀,只不过一个是10万条,一个是100万条,那我们用一个小一点的数据,数据量,然后into。Table是这张表格,哎,放到这张表里边,但是你要指明。你这个表是一个分区表啊,啊,你要指明分区,这个分区字段是什么。Partition。然后是P是吧,等于一个。哎,中文了是吧。
13:02
我们叫001可以吧。嗯,啊,写错了是吧。刚才写的时候为什么没有人提醒?也是发最后才看见是吧,它的一个表,然后具体的分区啊,走一下啊,导进来了啊,这样就导进来了,导进来之后我们同样的还导一个002吧,把同样的数据导到002里面。啊,这个table,然后是PARTITION002,让它最终我们动态分区啊,只产生两个分区,让它自带我们手动的控制一下。来这个地方看一下我们这个表。You have warehouse下面有一个。是这个吧,Or的是吧,不是small table是这张表分区,它里面有一个P等一跟p time等于二啊这样的一个数据,OK。
14:09
接下来我们按照步骤来做一个目标表啊,目标表其实这个目标表啊,它跟之前那个表的类型是一样的。啊,只不过它也是加一个P是吧。哎,注意这个P好像有点问题。这个下划线怎么没了?为什么这个文档这我加了下,这有下划线是吧,我还以为没了,他他这里面没显示出来是吧?OK,走一下成功了啊,你就创建了一个目标表,接下来这个目标表啊。来看一下啊。是我们这个对吧,我们之前往分区表里面插入数据的时候,都是类似于这种方式指定。
15:06
指定一个静态分区吧,哎,指定的是静态分区,就是固定好,现在我们要用这个分区表里面动态的去查数据了。看到C,其实我们这有是吧,就是这个。干掉他就是根据你这个字段看。批判啊,根据你查询出来的某一个字段来作为它的一个分区字段啊,作为它的一个分区字段来的是这个意思,而不要,而不需要在你音色的这个语句执行的时候来指定这个地方,就001002这种。那你原来的数据,如果表里边有一个ptime,它有很多,就是相当于我们刚才所说的365天的一个日志,你按照时间来,最后是不是形成了365个区啊,哎,这个就很方便了,很方便了,来走一下看他能不能成功,注意啊这块的一个内容,如果是上面没有做操作,你可以把它全部复制过来,粘贴到这个窗口,就运行一下也可以知道吧。
16:12
啊,就是你看这块内容是什么,就是刚才我们看到那些相关的属性值吧,啊,其实我们只改了一个是吧,改了哪一个。严格模式改成了非严格模式吧,就改了这一个啊C。啊,他已经在走了是吧,这个时候我们是没有,哎,在。插入分区的时候,指定你要往哪个分区里面插,而是根据查询出来的字段,查询出来的字段。当然我们这个是建了两个分区表啊,建两个分区表,如果说原始数据里面,就像我们刚才所说,它不是时间戳。而是具体的它年月日这种的话,哎,给大家演示的应该更好一点,而不是从分区表,其实现在这个操作在大家看来没有什么意义是吧,本身就是分区表数据,然后你就导到另外一个分区表里边啊,更重要的意义在于大家一定要知道,就是原始的这个表不是分区表啊,非分区表,然后你拿着这个非分区表里面有个字段啊。
17:16
哎,去作为分区表的分区字段码。懂什么意思吧,哎,作为它这个分区资本,然后动态的往里面填,这个是很有意义的,就把一张很大的表变成了一个分区表,变成一个分区表来我们看一下咱们这个表。哎,他已经它动态的添加了两个分区吧,啊,动态的添加了两个分区是这样的,这里边主要的要改的一个地方就是。哎,你把这个。改成非严格模式,哎,它才能去动态的去让你添加分区啊,添加分区好后面这两个题一下就分区分同它放在了那个什么优化里边,像个分区分桶,它为了干什么似的。
18:02
为什么要建分区表?为什么建分表?数据集过大了啊,数据集过大的时候啊,我们要把它分到不同的文件,或者说这个是不同的文件夹是吧?哎,这个是文件夹就是路径啊文件夹这个是分到不同的文件里边,第一个便于便于管理吧,第二个就是你在查询的时候不用取全表数据吧,哎,你可以取某一个分区,然后分同表,它是不是自己有特利的抽样查询的方式啊,哎,你就选择去取全量数据了。那你在执行任何条件的时候,哎,提前过滤了。啊,你提前过滤哎,只取一个分区,也就只取一个文件夹上的一个数据,那它一个数据量是相当少的啊,就会优化了你整个的一个执行,每一个汉的一个效率啊,效率问题,所以它分区分统其实也是整个have当中,对于建表的时候一个优化策略,优化策略,但是分图表在公司当中,现在就像我之前所说的用的比较少啊,用的比较少啊,更多的分区表这块用的是很多的,因为每天的一个日志量就非常大,它可能针对于每天都要建一个不同的区啊,我们区好。
我来说两句