转自:http://lxw1234.com/archives/2015/09/484.htm
关键字:Hive 复制表
Hive中有时候会遇到复制表的需求,复制表指的是复制表结构和数据。
如果是针对非分区表,那很简单,可以使用CREATE TABLE new_table AS SELECT * FROM old_table;
那么如果是分区表呢?
首先想到的办法可能是:
先创建一张和old_table结构相同的new_table,包括分区;可以使用CREATE TABLE new_table LIKE old_table;
接下来使用动态分区,把old_table的数据INSERT到new_table中。
这个方法当然可以,但可能不是最快的。
其实可以这样做:
1. CREATE TABLE new_table LIKE old_table;
2. 使用hadoop fs -cp 命令,把old_table对应的HDFS目录的文件夹全部拷贝到new_table对应的HDFS目录下;
3. 使用MSCK REPAIR TABLE new_table;修复新表的分区元数据;
看例子:
有一张分区表t1,只有两个分区,每个分区中都有一条数据,如下:
- hive> show partitions t1;
- OK
- pt=2015-09-11
- pt=2015-09-12
- Time taken: 0.11 seconds, Fetched: 2 row(s)
- hive> desc t1;
- OK
- id string
- pt string
- # Partition Information
- # col_name dat