一起学Hive——总结复制Hive表结构和数据的方法

 在使用Hive的过程中,复制表结构和数据是很常用的操作,本文介绍两种复制表结构和数据的方法。

1、复制非分区表表结构和数据

Hive集群中原本有一张bigdata17_old表,通过下面的SQL语句可以将bigdata17_old的表结构和数据复制到bigdata17_new表:
CREATE TABLE bigdata17_new AS SELECT * FROM bigdata17_old;

如果是分区表,则必须使用like关键字复制表结构,包括分区,然后用insert语句将老表的数据插入新表中。

2、复制分区表表结构和数据
复制表SQL:
CREATE TABLE bigdata17_new like bigdata17_old;

复制数据sql:
insert overwrite table bigdata17_new partition(dt) select * from bigdata17_old;

如果遇到bigdata17_old表数据量巨大,有T以上的级别时,上述方法的效率则比较低。下面介绍一种快速复制表结构和表数据的方法。

从旧表中复制表结构,这个和上面介绍方法是一样的:
CREATE TABLE bigdata17_new like bigdata17_old;

然后使用hadoop fs - cp命令将bigdata17_old旧表的数据拷贝到bigdata17_new新表:

hadoop fs -cp /user/warehouse/bigdata17.db/bigdata17_old/* /user/warehouse/bigdata17.db/bigdata17_new/

然后执行MSCK REPAIR TABLE new_table;命令让两张表的分区元数据保持一致。

详细使用过程如下:
bigdata17_old表有两个字段,id和dt,其中dt是分区字段,一共有4条记录,两个分区:

hive> desc bigdata17_old; OK id                      int                                          dt                      string                                                         # Partition Information           # col_name              data_type               comment                                dt                      string                                       Time taken: 0.147 seconds, Fetched: 7 row(s)  hive> select * from bigdata17_old; OK 15      2018-10-13 18      2018-10-13 12      2018-10-14 13      2018-10-14 Time taken: 0.118 seconds, Fetched: 4 row(s)  hive> show partitions bigdata17_old; OK dt=2018-10-13 dt=2018-10-14 Time taken: 0.113 seconds, Fetched: 2 row(s)

创建表结构和bigdata17_old表一模一样的表bigdata17_new:

create table bigdata17_new like bigdata17_old;

查看表bigdata17_new的表结构:

hive> show partitions bigdata17_new; OK Time taken: 0.153 seconds hive> desc bigdata17_new; OK id                      int                                          dt                      string                                                         # Partition Information           # col_name              data_type               comment                                dt                      string                                       Time taken: 0.151 seconds, Fetched: 7 row(s)

由于表bigdata17_new还没有数据,因此该表中没有分区信息。

将bigdata17_old目录下的数据文件拷贝到bigata17_new目录下:

[root@hadoop-master hive_test]# hadoop fs -cp /user/hive/warehouse/bigdata17.db/bigdata17_old/* /user/hive/warehouse/bigdata17.db/bigdata17_new/; 18/10/13 19:02:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable [root@hadoop-master hive_test]# hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_new/ 18/10/13 19:03:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Found 2 items drwxr-xr-x   - root supergroup          0 2018-10-13 19:02 /user/hive/warehouse/bigdata17.db/bigdata17_new/dt=2018-10-13 drwxr-xr-x   - root supergroup          0 2018-10-13 19:02 /user/hive/warehouse/bigdata17.db
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信