08-表属性操作

写在前面的话:

该系列博文是我学习《 Hive源码解析与开发实战》视频课程的一个笔记,或者说总结,暂时没有对视频中的操作去做验证,只是纯粹的学习记录。

有兴趣看该视频的博友可以留言,我会共享出来,相互交流学习 ^.^。

*********************************************************************************************************

本文目录:
一、修改表名
二、修改列名
三、增加列
四、修改表属性
4.1、查看表属性
4.2、修改tblproperties属性
4.2.1、修改该属性下的comment
4.2.2、修改该属性下的extenal
4.3、修改serdeproperties属性
4.3.1、修改该属性下的field.delim
①无分区表修改;②有分区表修改;
4.4、修改location属性

本文主要讲解表的属性的操作。

一、修改表名:

  alter table tablename rename to newtablename;  

二、修改列名:

  alter   table   tablename   change     column    old_column_name     new_column_name    new_column_type   comment  'xxxxx'  after serverity;

  解释:

  1、comment 'xxx'   表示对这一列的解释说明;

  2、after serverity 表示该列放到serverity列的后面,after后面跟一个列名;当然也可以使用first ,这样可以把该列放到第一列。

     

三、增加列:

    alter table tablename add columns(new_add_cl  column_type  comment  'xxxx',new_add_cl2  column_type  comment   'yyyy' );

       这里是增加两列,默认这增加的两列放在末尾,如果想改变位置,那么通过上面的列改变命令change column 来改变列位置。

四、演示:

  4.1、创建一个表:

    

    

  4.2、修改表名:

    

         

    如上,就成功的将testchange表名修改为了test。

4.2、添加列:

    

    这样就增加了两列:

    

    通过修改列名的命令,移动type列到name列后面:

    

    注意这里是利用修改列名的命令,把type列还是修改为type列,也就是说type名字和类型不变,主要是要利用后面的after来进行移动位置,

    查看该表结构,发现type确实移动到了name后面:

    

    当然我们也可以用first放到第一列:

    

4.3、修改列:

    接着上面的操作,我们还可以修改列的名字以及列的类型,当然其实还可以修改列的位置,但上面已经演示了修改列的位置,下面就只演示修改列名和类型:

    

    

五、修改表属性:

  5.1、如何查看表的属性:

    使用该命令来查看表的属性:desc formatted tablename;

  5.2、修改表的属性:tblproperties

    然后来修改下表的属性:

    

    该命令为:alter table 表名   set  tblproperties('属性名'='设置该属性的值');

    然后再查看该表的属性,就会多一个comment:

    

    那么如果要把该属性的值修改了,那么可以再执行下该命令,并把属性值重新设置下:

    

    

  5.3、修改表属性:serdeproperties

     serde是序列化和反序列化。也就是说这个表属性serdeproperties是关于序列化和反序列化的属性。

     比如,修改表中字段的分割符,字段的分割符会用于序列化和反序列化:

     ①首先创建一个无分区的表:

    

    注意这里该表中的字段是以'#'分割的。

      ②针对无分区的表进行修改分割符:

     

     ③创建一个分区表:

    

    ④针对分区表进行修改分隔符:

    如果还用之前那个针对无分区表修改分隔符的语句,那么执行后不会起作用。因此我们需要专门针对有分区的表执行专门的语句:

    

      

    为什么用之前那个无分区表修改分割符的方式会不起作用呢?

    因为第一种方式(之前针对无分区表修改分隔符的方式)对之前加载进表中的数据是没办法修改它们的分割符的,它只对执行该命令之后添加进来的数据(甚至包括新增分区然后添加的数据)生效;

    而第二种方式(针对有分区表修改分隔符的方式)还可以对之前加载进来的数据生效,通过指定分区使该分区之前的数据分割符也修改;

    无分区和有分区修改分隔符的不同之处:

    a>无分区修改的话,用第一种语句方式,对老数据和新数据都生效;

    b>有分区修改的话,如果用第一种语句方式,只对之后加载的新数据有效,对之前加载的老数据无效;而如果用第二种方式,指定分区修改,才可以对之前加载的老数据有效。    

    ⑤为什么要修改分割符?

     比如我创建表的时候设置的分割符和实际数据里面的分隔符不相同,但这个时候表已经创建了,那么为了不删除后重新创建,我们可以只修改表属性serdeproperties中的分隔符就可以很好的加载数据了。

   5.4、修改表属性:location

    不管是内部还是外部表都可以指定location位置的。注意:location指定的位置必须是hdfs上的位置。

    

    注意这个语句和前面的语句相比没有用括号来指定值;如果要修改分区表中某个分区的location的话,需要通过partition指定,每一个分区可以有自己单独的location。

    另外,我们还可以把内部表转为外部表,以及外部表转为内部表,通过tblproperties这个表属性下的EXTERNAL:

    

    内部表和外部表转化的场景:

    比如,有一个内部表,先在我们想增加或者修改一些字段,我们可以先转化它为外部表,然后删除,再重新创建该表。

六、表属性的其他一些操作:

  

原文地址:https://www.cnblogs.com/lordcheng/p/7487187.html