复制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以上的级别时,上述方法的效率则比较低。下面介绍一种快速复制表结构和表数据的方法。

  1. 从旧表中复制表结构,这个和上面介绍方法是一样的:
CREATE TABLE bigdata17_new like bigdata17_old;
  1. 然后使用hadoop fs - cp命令将bigdata17_old旧表的数据拷贝到bigdata17_new新表:
hadoop fs -cp /user/warehouse/bigdata17.db/bigdata17_old/* /user/warehouse/bigdata17.db/bigdata17_new/
  1. 然后执行MSCK REPAIR TABLE new_table;命令让两张表的分区元数据保持一致。

如果是跨Hive集群复制表和数据,又要怎么做呢?

其实和上述步骤差不多,只是因为跨Hive集群,新表和旧表之间不能使用hadoop cp命令拷贝数据。假设有两个集群,分区为Hive1和Hive2,两个Hive集群都有表bigdata17_order,表结构完全一样。怎么将集群Hive1中的bigdata17_order表的数据拷贝到集群Hive2中的bigdata17_order表中呢?下面介绍实现步骤:
1、将表Hive1集群bigdata17_order目录下的数据下载到本地:

hadoop fs -get /user/warehouse/bigdata17.db/bigdata17_order/* /home/hadoop/hivetest/bigdata17_order/

2、通过hadoop fs -put命令将本地数据上传到集群Hive2中的bigdata17_order目录中:

hadoop fs -put /home/hadoop/hivetest/bigdata17_order/* /user/warehouse/bigdata17.db/bigdata17_order/

3、在集群Hive2中执行MSCK命令修复表bigdata17_order的分区信息:

MSCK REPAIR TABLE bigdata17_order;
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值