Hive 表的复制

简介

本文介绍hive中表的复制

非分区表的复制

如果我们想要复制一张非分区表,可以使用create tale as去解决;

实例

假如我们有一张t_temp的表,为普通的内部表.复制可以采用如下的语句:

create table t_copy as select * from t_temp;

这样就复制出一张和t_temp结构一致的表

分区表的复制

分区表如果采用这种create…as…的方法去复制,数据是可以查询的,但是表的结构是错误的,他已经变成了一个非分区表.想要去实现分区表的复制,有下面2种方法

动态分区

我们可以建一张和t_temp一样的表结构的表,然后使用动态分区的方法把数据导入

create table t_copy like t_part;
insert overwrite  table  t_copy partition(year,month)
select id,name,orderdate,substring(orderdate,1,4),substring(orderdate,6,2) from t_part;

执行后可以得到和之前一样的分区表,但是这种方法并不是最快的方法
- 注意当使用了overwrite时,不再使用into.

msck修复分区

我们可以先复制出一张表结构和t_part一样的表,然后将t_part表目录下的数据copy到t_copy,然后使用分区表的msck指令去重新生成分区.

create table t_copy like t_part;
dfs -cp /user/hive/warehouse/test_neil.db/t_part/* /user/hive/warehouse/test_neil.db/t_copy/;
msck repair table t_copy;

使用这样的方法同样可以去快速copy分区表,而且这样操作的速度比使用动态分区要快,因为我们移动数据是使用hdfs的文件复制,而不是启动mapreduce作业.

你可能感兴趣的:(hive)