在使用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/bigdata17_new/dt=2018-10-14

查看表bigdata17_new的分区信息:

hive> show partitions bigdata17_new;
OK
Time taken: 0.125 seconds

虽然数据拷贝过来了,但是表bigdata17_new的分区信息还没更新到metastore中,因此需要使用MSCK命令修复bigdata17_new的分区信息,执行该命令后就会把bigdata17_new的分区信息更新到hive metastore中:

hive> MSCK REPAIR TABLE bigdata17_new;
OK
Partitions not in metastore:    bigdata17_new:dt=2018-10-13     bigdata17_new:dt=2018-10-14
Repair: Added partition to metastore bigdata17_new:dt=2018-10-13
Repair: Added partition to metastore bigdata17_new:dt=2018-10-14
Time taken: 0.21 seconds, Fetched: 3 row(s)

查看表bigdata17_new的表结构和查询表数据:

hive> show partitions bigdata17_new;
OK
dt=2018-10-13
dt=2018-10-14
Time taken: 0.137 seconds, Fetched: 2 row(s)
hive> select * from bigdata17_new;
OK
15      2018-10-13
18      2018-10-13
12      2018-10-14
13      2018-10-14
Time taken: 0.099 seconds, Fetched: 4 row(s)

表bigdata17_new已经创建完毕,它的表结构、分区信息和表bigdata17_old一样,数据也一模一样。

如果是跨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;

Hive MSCK命令的用法请参考:一起学Hive——使用MSCK命令修复Hive分区

总结
1、介绍复制Hive非分区表和数据的方法
2、介绍复制Hive分区表和数据的两种方法
3、介绍跨Hive集群拷贝分区表数据的方法。

转载于:https://www.cnblogs.com/airnew/p/9788122.html

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

  1. mysql复制表结构和数据

    手动方法: 方法1:把你要复制的表当成一个文件一样,右键复制,右键粘贴,这个方法复制的是表结构和数据. 方法2:选中原表拖动到新位置的空白处,松开鼠标,会提示你复制表结构和数据,或者仅复制表结构,没有 ...

  2. sql复制表结构和数据_SQL复制表

    sql复制表结构和数据 In real time we do face situations where we need to copy data from one table to another ...

  3. Mysql复制表两种方式(复制表结构、复制表结构和数据、复制表中的部分数据、复制表中的部分数据并起别名)

    需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE - SELECT 命令,是无法实现的. 本章节将为大家介绍如何完整的复制MySQL数据表,步骤如 ...

  4. MYSQL复制表结构及数据到新表

    1.复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from ...

  5. DB2复制表结构及数据

    在DB2数据库中,复制已经存在的表的结构及其数据.我们采用两步走方式:第一步先复制表结构,第二部拷贝数据. 第一步:复制表结构 方法一: Create table test_Rate as (sele ...

  6. Oracle 复制表结构和数据

    1.复制表结构 create table table_new as select * from table_old where 1=0; 或者 create table table_new as se ...

  7. mysql重新安装后之前表_关于重装mysql数据库之后.新的数据库引入旧数据的表结构和数据问题...

    由于种种问题,也许某一天数据库崩了,或者电脑崩了.重新装Mysql数据库的话:如何导入旧的数据库中的的表结构以及数据呢? 我是在重置电脑之后.进行重装数据库之后.遇到此问题.由于之前未遇到过此种问题. ...

  8. 表间数据复制--SELECT表中的数据插入到新的表中(ORACLE,MSSQL)

    表间数据复制--SELECT表中的数据插入到新的表中 --在Oracle 9i中 CREATE TABLE scott.test AS (SELECT DISTINCT empno,ename,hir ...

  9. oracle点勾算提交吗,oracle表结构和数据导出时的一些勾选项说明

    使用pl/sql developer导出oracle数据库的表结构和表数据时,有一些勾选项供用户选择,需要用户根据实际情况进行勾选或取消. 导出方法如下: 一.只导出表结构 1.使用pl/sql de ...

  10. 快速复制数据库表中的数据SQL

    ---通过复制tbl_int_dual2表中的数据产生tbl_int_dual1表中2015-11-11上午8点的小时类统一接口统计数据.insert into tbl_int_dual1(field ...

最新文章

  1. Redis线程模型的前世今生
  2. Python使用sklearn构建广义线性模型:gamma回归(Gamma regression)实战
  3. EditText 空指针问题
  4. 买了服务器之后如何操作系统,买了服务器之后如何操作系统
  5. Mybatis源码之数据源模块分析
  6. it运维中faq_如何编写系统FAQ
  7. 解决迭代器调用next方法时报错:StopIteration
  8. 【邀请函】第十届中国电子政务高峰论坛即将开幕
  9. 知道半径 两点角度 怎么求坐标
  10. gispython定义查询_定义查询方法
  11. libsuperuser
  12. trunc函数_这几个舍入函数你都会用吗?
  13. css 多行文本的溢出显示省略号(移动端)
  14. 用户心中十大最具影响力国产软件评选揭晓
  15. 关于md导入时本地图片外链失败的解决方法
  16. 我的C站万粉成长之路、2021 笔耕不辍
  17. java排他_排他文件锁实现(Java版本)
  18. Mysql——》通信方式:半双工
  19. (7)web安全|渗透测试|网络安全 如何判断是否有CDN存在,并绕过CDN找到真正的ip的方法
  20. C#集合中的Add与AddRange

热门文章

  1. OpenCV-图像处理(22、像素重映射(cv::remap))
  2. 7-3 小L的难题 (15 分)
  3. centos7安装uwsgi报错_nginx + uwsgi 发布django项目!(linux为centos7)
  4. python表达式3and5_表达式 3 and 5 的值为____________。(5.0分)_学小易找答案
  5. php复制按钮,【typecho】typecho优化之代码框添加复制按钮
  6. $2a开头的是什么加密方式_为什么非对称加密比对称加密慢?
  7. 单板计算机图片大全,最强单板计算机UP Board之Windows10完全版、Ubuntu、Andriod系统体验 | 爱板网...
  8. java匿名内部类 内部类_java中的匿名内部类详细总结
  9. c语言扎金花编程,一个C语言开发的炸金花纸牌游戏附带vs性能分析报告
  10. 极客大学架构师训练营 系统架构 高并发 高可用 垂直伸缩 水平伸缩 第7课 听课总结