Hive中如何快速的复制一张分区表(包括数据)

转载网址:http://lxw1234.com/archives/2015/09/484.htm
我自己的实际操作,遇到了一些问题。
事先已经创建好了一张表t421,其表结构为:

hive> desc formatted t451;
OK
# col_name              data_type               comment             

id                      int                     None                
city                    string                  None                
name                    string                  None                
sex                     string                  None                

# Partition Information          
# col_name              data_type               comment             

day                     int                     None                

# Detailed Table Information             
Database:               fdm                      
Owner:                  root                     
CreateTime:             Mon May 01 08:18:01 PDT 2017     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Retention:              0                        
Location:               hdfs://hadoop:9000/warehouse/fdm.db/t451         
Table Type:             MANAGED_TABLE            
Table Parameters:                
        transient_lastDdlTime   1493651881          

# Storage Information            
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe       
InputFormat:            org.apache.hadoop.mapred.TextInputFormat         
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat       
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:             
        field.delim             \t                  
        serialization.format    \t                  
Time taken: 0.073 seconds

我们查看一下具体的表数据:

hive> select *
    > from t451;
OK
10      beijing zhang   man     20
20      shanghai        wang    man     20
30      beijing dongdong        man     21
40      shanghai        lisi    woman   21
Time taken: 0.126 seconds

接下来我们在查看一下分区的相关信息:

hive> show partitions t451;
OK
day=20
day=21
Time taken: 0.046 seconds

接下来我们按照Hive复制一张分区表的方式进行操作:
1. create table new_table like old_table;
2. 使用hadoop fs -cp 命令,把old_table对应的hdfs目录的文件夹全部拷贝到new_table对应的hdfs目录下;
注意:如果不是分区表复制的话,上面的两个步骤已经可以了。
3. 使用msck repair table new_table命令,修复新表的分区元数据。
好的,接下来我们进行第一步操作:
1、创建一张相同表结构的新表t458;

hive> create table t458 like t451;
OK
Time taken: 0.1 seconds
hive> desc formatted t458;
OK
# col_name              data_type               comment             

id                      int                     None                
city                    string                  None                
name                    string                  None                
sex                     string                  None                

# Partition Information          
# col_name              data_type               comment             

day                     int                     None 

2、使用hadoop fs -cp命令把t451对应HDFS目录的所有文件夹复制到t458对应的HDFS目录下。

[root@hadoop local]# hadoop fs -cp /warehouse/fdm.db/t451/* /warehouse/fdm.db/t458
[root@hadoop local]# hadoop fs -lsr /warehouse/fdm.db/t458/
drwxr-xr-x   - root supergroup          0 2017-05-01 09:02 /warehouse/fdm.db/t458/day=20
-rw-r--r--   1 root supergroup         42 2017-05-01 09:02 /warehouse/fdm.db/t458/day=20/word1.txt
drwxr-xr-x   - root supergroup          0 2017-05-01 09:02 /warehouse/fdm.db/t458/day=21
-rw-r--r--   1 root supergroup         47 2017-05-01 09:02 /warehouse/fdm.db/t458/day=21/word2.txt
[root@hadoop local]# hadoop fs -cat /warehouse/fdm.db/t458/day=20/word1.txt
10      beijing zhang   man
20      shanghai        wang    man
[root@hadoop local]# hadoop fs -cat /warehouse/fdm.db/t458/day=21/word2.txt
30      beijing dongdong        man
40      shanghai        lisi    woman

3、此时此刻我们已经将表数据和表结构都已经复制到t458这个表当中,但是此时我们查看一下分区的相关信息。

hive> show partitions t458;
OK
Time taken: 0.054 seconds

4、在Hive中用使用msck repair table t458这个命令修复新表t458对应的分区元数据;

hive> msck repair table t458;
OK
Time taken: 0.046 seconds

5、再次查看(呵呵,这是为什么呢?)。

hive> show partitions t458;
OK
Time taken: 0.048 seconds
hive> select *
    > from t458;
OK
Time taken: 0.033 seconds
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值